48.3 KB
python-procrunner version 1.1.0-1~jan+unchanged1 (unchanged) vs.
python-procrunner version 2.3.0-1~jan+nur1 (fresh-releases)
48.2 KB
python3-procrunner_1.1.0-1~jan+unchanged1_all.deb vs.
python3-procrunner_2.3.0-1~jan+nur1_all.deb
452 B
file list
    
Offset 1, 3 lines modifiedOffset 1, 3 lines modified
1 -rw-r--r--···0········0········0········4·2020-06-08·12:54:38.000000·debian-binary1 -rw-r--r--···0········0········0········4·2020-06-08·12:54:38.000000·debian-binary
2 -rw-r--r--···0········0········0·····1516·2020-06-08·12:54:38.000000·control.tar.xz2 -rw-r--r--···0········0········0·····1468·2020-06-08·12:54:38.000000·control.tar.xz
3 -rw-r--r--···0········0········0····10420·2020-06-08·12:54:38.000000·data.tar.xz3 -rw-r--r--···0········0········0····11604·2020-06-08·12:54:38.000000·data.tar.xz
2.31 KB
control.tar.xz
2.28 KB
control.tar
698 B
file list
    
Offset 1, 5 lines modifiedOffset 1, 5 lines modified
1 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./1 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./
2 -rw-r--r--···0·root·········(0)·root·········(0)·····1273·2020-06-08·12:54:38.000000·./control2 -rw-r--r--···0·root·········(0)·root·········(0)·····1254·2020-06-08·12:54:38.000000·./control
3 -rw-r--r--···0·root·········(0)·root·········(0)······851·2020-06-08·12:54:38.000000·./md5sums3 -rw-r--r--···0·root·········(0)·root·········(0)······748·2020-06-08·12:54:38.000000·./md5sums
4 -rwxr-xr-x···0·root·········(0)·root·········(0)······261·2020-06-08·12:54:38.000000·./postinst4 -rwxr-xr-x···0·root·········(0)·root·········(0)······261·2020-06-08·12:54:38.000000·./postinst
5 -rwxr-xr-x···0·root·········(0)·root·········(0)······410·2020-06-08·12:54:38.000000·./prerm5 -rwxr-xr-x···0·root·········(0)·root·········(0)······410·2020-06-08·12:54:38.000000·./prerm
691 B
./control
    
Offset 1, 14 lines modifiedOffset 1, 14 lines modified
1 Package:·python3-procrunner1 Package:·python3-procrunner
2 Source:·python-procrunner2 Source:·python-procrunner
3 Version:·1.1.0-1~jan+unchanged13 Version:·2.3.0-1~jan+nur1
4 Architecture:·all4 Architecture:·all
5 Maintainer:·Debian·Science·Maintainers·<debian-science-maintainers@lists.alioth.debian.org>5 Maintainer:·Debian·Science·Maintainers·<debian-science-maintainers@lists.alioth.debian.org>
6 Installed-Size:·526 Installed-Size:·55
7 Depends:·python3-six,·python3:any7 Depends:·python3:any
8 Section:·python8 Section:·python
9 Priority:·optional9 Priority:·optional
10 Homepage:·https://github.com/DiamondLightSource/python-procrunner10 Homepage:·https://github.com/DiamondLightSource/python-procrunner
11 Description:·Versatile·utility·function·to·run·external·processes·from·Python11 Description:·Versatile·utility·function·to·run·external·processes·from·Python
12 ·Versatile·utility·function·to·run·external·processes·from·Python,·with·many12 ·Versatile·utility·function·to·run·external·processes·from·Python,·with·many
13 ·features:13 ·features:
14 ··*·runs·an·external·process·and·waits·for·it·to·finish14 ··*·runs·an·external·process·and·waits·for·it·to·finish
923 B
./md5sums
30.0 B
./md5sums
Files differ
875 B
line order
    
Offset 1, 9 lines modifiedOffset 1, 8 lines modified
1 usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/PKG-INFO1 usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/PKG-INFO
2 usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/dependency_links.txt2 usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/dependency_links.txt
3 usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/not-zip-safe3 usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/not-zip-safe
4 usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/requires.txt 
5 usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/top_level.txt4 usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/top_level.txt
6 usr/lib/python3/dist-packages/procrunner/__init__.py5 usr/lib/python3/dist-packages/procrunner/__init__.py
7 usr/share/doc/python3-procrunner/changelog.Debian.gz6 usr/share/doc/python3-procrunner/changelog.Debian.gz
8 usr/share/doc/python3-procrunner/changelog.gz7 usr/share/doc/python3-procrunner/changelog.gz
9 usr/share/doc/python3-procrunner/copyright8 usr/share/doc/python3-procrunner/copyright
45.3 KB
data.tar.xz
45.3 KB
data.tar
3.58 KB
file list
    
Offset 1, 19 lines modifiedOffset 1, 18 lines modified
1 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./1 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./
2 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/2 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/
3 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/3 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/
4 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/python3/4 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/python3/
5 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/5 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/
6 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner/6 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner/
7 -rw-r--r--···0·root·········(0)·root·········(0)····22059·2019-11-04·08:50:04.000000·./usr/lib/python3/dist-packages/procrunner/__init__.py7 -rw-r--r--···0·root·········(0)·root·········(0)····23652·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner/__init__.py
8 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/8 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/
9 -rw-r--r--···0·root·········(0)·root·········(0)·····7881·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/PKG-INFO9 -rw-r--r--···0·root·········(0)·root·········(0)·····9628·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/PKG-INFO
10 -rw-r--r--···0·root·········(0)·root·········(0)········1·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/dependency_links.txt10 -rw-r--r--···0·root·········(0)·root·········(0)········1·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/dependency_links.txt
11 -rw-r--r--···0·root·········(0)·root·········(0)········1·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/not-zip-safe11 -rw-r--r--···0·root·········(0)·root·········(0)········1·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/not-zip-safe
12 -rw-r--r--···0·root·········(0)·root·········(0)·······36·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/requires.txt 
13 -rw-r--r--···0·root·········(0)·root·········(0)·······11·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/top_level.txt12 -rw-r--r--···0·root·········(0)·root·········(0)·······11·2020-06-08·12:54:38.000000·./usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/top_level.txt
14 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/share/13 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/share/
15 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/share/doc/14 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/share/doc/
16 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/share/doc/python3-procrunner/15 drwxr-xr-x···0·root·········(0)·root·········(0)········0·2020-06-08·12:54:38.000000·./usr/share/doc/python3-procrunner/
17 -rw-r--r--···0·root·········(0)·root·········(0)······256·2020-06-08·12:54:38.000000·./usr/share/doc/python3-procrunner/changelog.Debian.gz16 -rw-r--r--···0·root·········(0)·root·········(0)······264·2020-06-08·12:54:38.000000·./usr/share/doc/python3-procrunner/changelog.Debian.gz
18 -rw-r--r--···0·root·········(0)·root·········(0)·····1204·2019-11-04·08:50:04.000000·./usr/share/doc/python3-procrunner/changelog.gz17 -rw-r--r--···0·root·········(0)·root·········(0)·····1897·2020-06-08·12:54:38.000000·./usr/share/doc/python3-procrunner/changelog.gz
19 -rw-r--r--···0·root·········(0)·root·········(0)·····1904·2020-06-08·12:54:38.000000·./usr/share/doc/python3-procrunner/copyright18 -rw-r--r--···0·root·········(0)·root·········(0)·····1904·2020-06-08·12:54:38.000000·./usr/share/doc/python3-procrunner/copyright
26.2 KB
./usr/lib/python3/dist-packages/procrunner/__init__.py
    
Offset 1, 68 lines modifiedOffset 1, 69 lines modified
1 #·-*-·coding:·utf-8·-*- 
  
2 from·__future__·import·absolute_import,·division,·print_function 
  
3 import·codecs1 import·codecs
 2 import·functools
 3 import·io
4 import·logging4 import·logging
5 import·os5 import·os
6 import·select6 import·select
7 import·six7 import·shutil
8 import·subprocess8 import·subprocess
9 import·sys9 import·sys
10 import·time10 import·time
11 import·timeit11 import·timeit
12 import·warnings12 import·warnings
13 from·multiprocessing·import·Pipe13 from·multiprocessing·import·Pipe
14 from·threading·import·Thread14 from·threading·import·Thread
  
15 #15 #
16 #··run()·-·A·function·to·synchronously·run·an·external·process,·supporting16 #··run()·-·A·function·to·synchronously·run·an·external·process,·supporting
17 #··········the·following·features:17 #··········the·following·features:
18 #18 #
19 #····-·runs·an·external·process·and·waits·for·it·to·finish19 #····-·runs·an·external·process·and·waits·for·it·to·finish
20 #····-·does·not·deadlock,·no·matter·the·process·stdout/stderr·output·behaviour20 #····-·does·not·deadlock,·no·matter·the·process·stdout/stderr·output·behaviour
21 #····-·returns·the·exit·code,·stdout,·stderr·(separately),·and·the·total·process21 #····-·returns·the·exit·code,·stdout,·stderr·(separately)·as·a
22 #······runtime·as·a·dictionary22 #······subprocess.CompletedProcess·object
23 #····-·process·can·run·in·a·custom·environment,·either·as·a·modification·of23 #····-·process·can·run·in·a·custom·environment,·either·as·a·modification·of
24 #······the·current·environment·or·in·a·new·environment·from·scratch24 #······the·current·environment·or·in·a·new·environment·from·scratch
 25 #····-·stdin·can·be·fed·to·the·process
25 #····-·stdin·can·be·fed·to·the·process,·the·returned·dictionary·contains 
26 #······information·how·much·was·read·by·the·process 
27 #····-·stdout·and·stderr·is·printed·by·default,·can·be·disabled26 #····-·stdout·and·stderr·is·printed·by·default,·can·be·disabled
28 #····-·stdout·and·stderr·can·be·passed·to·any·arbitrary·function·for27 #····-·stdout·and·stderr·can·be·passed·to·any·arbitrary·function·for
29 #······live·processing28 #······live·processing
30 #····-·optionally·enforces·a·time·limit·on·the·process29 #····-·optionally·enforces·a·time·limit·on·the·process
31 #30 #
32 #31 #
33 #··Usage·example:32 #··Usage·example:
34 #33 #
35 #·import·procrunner34 #·import·procrunner
36 #·result·=·procrunner.run(['/bin/ls',·'/some/path/containing·spaces'])35 #·result·=·procrunner.run(['/bin/ls',·'/some/path/containing·spaces'])
37 #36 #
38 #··Returns:37 #··Returns:
39 #38 #
 39 #·ReturnObject(
40 #·{'command':·['/bin/ls',·'/some/path/containing·spaces'],40 #···args=('/bin/ls',·'/some/path/containing·spaces'),
41 #··'exitcode':·2, 
42 #··'runtime':·0.12990689277648926,41 #···returncode=2,
 42 #···stdout=b'',
43 #··'stderr':·'/bin/ls:·cannot·access·/some/path/containing·spaces:·No·such·file·or·directory\n',43 #···stderr=b'/bin/ls:·cannot·access·/some/path/containing·spaces:·No·such·file·or·directory\n'
 44 #·)
 45 #
 46 #·which·also·offers·(albeit·deprecated)
44 #··'stdout':·'', 
45 #··'time_end':·'2017-11-12·19:54:49·GMT', 
46 #··'time_start':·'2017-11-12·19:54:49·GMT', 
47 #··'timeout':·False} 
48 #47 #
 48 #·result.runtime·==·0.12990689277648926
 49 #·result.time_end·==·'2017-11-12·19:54:49·GMT'
 50 #·result.time_start·==·'2017-11-12·19:54:49·GMT'
 51 #·result.timeout·==·False
  
49 __author__·=·"""Markus·Gerstel"""52 __author__·=·"""Markus·Gerstel"""
50 __email__·=·"scientificsoftware@diamond.ac.uk"53 __email__·=·"scientificsoftware@diamond.ac.uk"
51 __version__·=·"1.1.0"54 __version__·=·"2.3.0"
  
52 logger·=·logging.getLogger("procrunner")55 logger·=·logging.getLogger("procrunner")
53 logger.addHandler(logging.NullHandler())56 logger.addHandler(logging.NullHandler())
  
  
54 class·_LineAggregator(object):57 class·_LineAggregator:
55 ····"""58 ····"""
56 ····Buffer·that·can·be·filled·with·stream·data·and·will·aggregate·complete59 ····Buffer·that·can·be·filled·with·stream·data·and·will·aggregate·complete
57 ····lines.·Lines·can·be·printed·or·passed·to·an·arbitrary·callback·function.60 ····lines.·Lines·can·be·printed·or·passed·to·an·arbitrary·callback·function.
58 ····The·lines·passed·to·the·callback·function·are·UTF-8·decoded·and·do·not61 ····The·lines·passed·to·the·callback·function·are·UTF-8·decoded·and·do·not
59 ····contain·a·trailing·newline·character.62 ····contain·a·trailing·newline·character.
60 ····"""63 ····"""
  
Offset 103, 20 lines modifiedOffset 104, 20 lines modified
103 ············if·self._print:104 ············if·self._print:
104 ················print(self._buffer)105 ················print(self._buffer)
105 ············if·self._callback:106 ············if·self._callback:
106 ················self._callback(self._buffer)107 ················self._callback(self._buffer)
107 ········self._buffer·=·""108 ········self._buffer·=·""
  
  
108 class·_NonBlockingStreamReader(object):109 class·_NonBlockingStreamReader:
109 ····"""Reads·a·stream·in·a·thread·to·avoid·blocking/deadlocks"""110 ····"""Reads·a·stream·in·a·thread·to·avoid·blocking/deadlocks"""
  
110 ····def·__init__(self,·stream,·output=True,·debug=False,·notify=None,·callback=None):111 ····def·__init__(self,·stream,·output=True,·debug=False,·notify=None,·callback=None):
111 ········"""Creates·and·starts·a·thread·which·reads·from·a·stream."""112 ········"""Creates·and·starts·a·thread·which·reads·from·a·stream."""
112 ········self._buffer·=·six.BytesIO()113 ········self._buffer·=·io.BytesIO()
113 ········self._closed·=·False114 ········self._closed·=·False
114 ········self._closing·=·False115 ········self._closing·=·False
115 ········self._debug·=·debug116 ········self._debug·=·debug
116 ········self._stream·=·stream117 ········self._stream·=·stream
117 ········self._terminated·=·False118 ········self._terminated·=·False
  
118 ········def·_thread_write_stream_to_buffer():119 ········def·_thread_write_stream_to_buffer():
Offset 127, 14 lines modifiedOffset 128, 15 lines modified
127 ····················char·=·self._stream.read(1)128 ····················char·=·self._stream.read(1)
128 ····················if·char:129 ····················if·char:
129 ························self._buffer.write(char)130 ························self._buffer.write(char)
130 ························la.add(char)131 ························la.add(char)
131 ················else:132 ················else:
132 ····················if·self._closing:133 ····················if·self._closing:
133 ························break134 ························break
 135 ············self._stream.close()
134 ············self._terminated·=·True136 ············self._terminated·=·True
135 ············la.flush()137 ············la.flush()
136 ············if·self._debug:138 ············if·self._debug:
137 ················logger.debug("Stream·reader·terminated")139 ················logger.debug("Stream·reader·terminated")
138 ············if·notify:140 ············if·notify:
139 ················notify()141 ················notify()
  
Offset 146, 14 lines modifiedOffset 148, 15 lines modified
146 ····················self._buffer.write(line)148 ····················self._buffer.write(line)
147 ····················if·output·or·callback:149 ····················if·output·or·callback:
148 ························linedecode·=·line.decode("utf-8",·"replace")150 ························linedecode·=·line.decode("utf-8",·"replace")
149 ························if·output:151 ························if·output:
150 ····························print(linedecode)152 ····························print(linedecode)
151 ························if·callback:153 ························if·callback:
152 ····························callback(linedecode)154 ····························callback(linedecode)
 155 ············self._stream.close()
153 ············self._terminated·=·True156 ············self._terminated·=·True
Max diff block lines reached; 22136/26728 bytes (82.82%) of diff not shown.
660 B
./usr/share/doc/python3-procrunner/changelog.Debian.gz
552 B
changelog.Debian
    
Offset 1, 11 lines modifiedOffset 1, 10 lines modified
1 python-procrunner·(1.1.0-1~jan+unchanged1)·unchanged;·urgency=low1 python-procrunner·(2.3.0-1~jan+nur1)·fresh-releases;·urgency=low
  
2 ··*·Build·for·debian-janitor·apt·repository.2 ··*·Build·for·debian-janitor·apt·repository.
  
3 ·--·Debian·Janitor·<janitor@jelmer.uk>··Mon,·07·Sep·2020·08:46:47·-00003 ·--·Debian·Janitor·<janitor@jelmer.uk>··Mon,·29·Mar·2021·10:31:06·-0000
  
4 python-procrunner·(1.1.0-1)·unstable;·urgency=medium4 python-procrunner·(1.1.0-1)·unstable;·urgency=medium
  
5 ··*·First·release·(Closes:·#962456)5 ··*·First·release·(Closes:·#962456)
6 ··6 ··
7 ·--·Sebastien·Delafond·<seb@debian.org>··Mon,·08·Jun·2020·13:47:32·+02007 ·--·Sebastien·Delafond·<seb@debian.org>··Mon,·08·Jun·2020·13:47:32·+0200
4.77 KB
./usr/share/doc/python3-procrunner/changelog.gz
4.68 KB
changelog
    
Offset 1, 115 lines modifiedOffset 1, 131 lines modified
1 =======1 =======
2 History2 History
3 =======3 =======
  
4 1.1.0·(2019-11-04)4 2.3.0·(2020-10-29)
 5 ------------------
 6 *·Add·Python·3.9·support,·drop·Python·3.5·support
 7 *·Fix·a·file·descriptor·leak·on·subprocess·execution
  
 8 2.2.0·(2020-09-07)
5 ------------------9 ------------------
 10 *·Calling·the·run()·function·with·unnamed·arguments·(other·than·the·command
 11 ··list·as·the·first·argument)·is·now·deprecated.·As·a·number·of·arguments
 12 ··will·be·removed·in·a·future·version·the·use·of·unnamed·arguments·will
 13 ··cause·future·confusion.·`Use·explicit·keyword·arguments·instead·(#62).·<https://github.com/DiamondLightSource/python-procrunner/pull/62>`_
 14 *·`The·run()·function·debug·argument·has·been·deprecated·(#63).·<https://github.com/DiamondLightSource/python-procrunner/pull/63>`_
 15 ··This·is·only·used·to·debug·the·NonBlockingStream*·classes.·Those·are·due
 16 ··to·be·replaced·in·a·future·release,·so·the·argument·will·no·longer·serve
 17 ··a·purpose.·Debugging·information·remains·available·via·standard·logging
 18 ··mechanisms.
 19 *·Final·version·supporting·Python·3.5
  
 20 2.1.0·(2020-09-05)
 21 ------------------
 22 *·`Deprecated·array·access·on·the·return·object·(#60).·<https://github.com/DiamondLightSource/python-procrunner/pull/60>`_
 23 ··The·return·object·will·become·a·subprocess.CompletedProcess·in·a·future
 24 ··release,·which·no·longer·allows·array-based·access.·For·a·translation·table
 25 ··of·array·elements·to·attributes·please·see·the·pull·request·linked·above.
 26 *·Add·a·`new·parameter·'raise_timeout_exception'·(#61).·<https://github.com/DiamondLightSource/python-procrunner/pull/61>`_
 27 ··When·set·to·'True'·a·subprocess.TimeoutExpired·exception·is·raised·when·the
 28 ··process·runtime·exceeds·the·timeout·threshold.·This·defaults·to·'False'·and
 29 ··will·be·set·to·'True'·in·a·future·release.
  
 30 2.0.0·(2020-06-24)
 31 ------------------
 32 *·Python·3.5+·only,·support·for·Python·2.7·has·been·dropped
 33 *·Deprecated·function·alias·run_process()·has·been·removed
 34 *·Fixed·a·stability·issue·on·Windows
  
 35 1.1.0·(2019-11-04)
 36 ------------------
6 *·Add·Python·3.8·support,·drop·Python·3.4·support37 *·Add·Python·3.8·support,·drop·Python·3.4·support
  
7 1.0.2·(2019-05-20)38 1.0.2·(2019-05-20)
8 ------------------39 ------------------
  
9 *·Stop·environment·override·variables·leaking·into·the·process·environment40 *·Stop·environment·override·variables·leaking·into·the·process·environment
  
10 1.0.1·(2019-04-16)41 1.0.1·(2019-04-16)
11 ------------------42 ------------------
  
12 *·Minor·fixes·on·the·return·object·(implement·equality,43 *·Minor·fixes·on·the·return·object·(implement·equality,
13 ··mark·as·unhashable)44 ··mark·as·unhashable)
  
14 1.0.0·(2019-03-25)45 1.0.0·(2019-03-25)
15 ------------------46 ------------------
  
16 *·Support·file·system·path·objects·(PEP-519)·in·arguments47 *·Support·file·system·path·objects·(PEP-519)·in·arguments
17 *·Change·the·return·object·to·make·it·similar·to48 *·Change·the·return·object·to·make·it·similar·to
18 ··subprocess.CompletedProcess,·introduced·with·Python·3.5+49 ··subprocess.CompletedProcess,·introduced·with·Python·3.5+
  
19 0.9.1·(2019-02-22)50 0.9.1·(2019-02-22)
20 ------------------51 ------------------
  
21 *·Have·deprecation·warnings·point·to·correct·code·locations52 *·Have·deprecation·warnings·point·to·correct·code·locations
  
22 0.9.0·(2018-12-07)53 0.9.0·(2018-12-07)
23 ------------------54 ------------------
  
24 *·Trap·UnicodeEncodeError·when·printing·output.·Offending·characters55 *·Trap·UnicodeEncodeError·when·printing·output.·Offending·characters
25 ··are·replaced·and·a·warning·is·logged·once.·Hints·at·incorrectly·set56 ··are·replaced·and·a·warning·is·logged·once.·Hints·at·incorrectly·set
26 ··PYTHONIOENCODING.57 ··PYTHONIOENCODING.
  
27 0.8.1·(2018-12-04)58 0.8.1·(2018-12-04)
28 ------------------59 ------------------
  
29 *·Fix·a·few·deprecation·warnings60 *·Fix·a·few·deprecation·warnings
  
30 0.8.0·(2018-10-09)61 0.8.0·(2018-10-09)
31 ------------------62 ------------------
  
32 *·Add·parameter·working_directory·to·set·the·working·directory63 *·Add·parameter·working_directory·to·set·the·working·directory
33 ··of·the·subprocess64 ··of·the·subprocess
  
34 0.7.2·(2018-10-05)65 0.7.2·(2018-10-05)
35 ------------------66 ------------------
  
36 *·Officially·support·Python·3.767 *·Officially·support·Python·3.7
  
37 0.7.1·(2018-09-03)68 0.7.1·(2018-09-03)
38 ------------------69 ------------------
  
39 *·Accept·environment·variable·overriding·with·numeric·values.70 *·Accept·environment·variable·overriding·with·numeric·values.
  
40 0.7.0·(2018-05-13)71 0.7.0·(2018-05-13)
41 ------------------72 ------------------
  
42 *·Unicode·fixes.·Fix·crash·on·invalid·UTF-8·input.73 *·Unicode·fixes.·Fix·crash·on·invalid·UTF-8·input.
43 *·Clarify·that·stdout/stderr·values·are·returned·as·bytestrings.74 *·Clarify·that·stdout/stderr·values·are·returned·as·bytestrings.
44 *·Callbacks·receive·the·data·decoded·as·UTF-8·unicode·strings75 *·Callbacks·receive·the·data·decoded·as·UTF-8·unicode·strings
45 ··with·unknown·characters·replaced·by·\ufffd·(unicode·replacement76 ··with·unknown·characters·replaced·by·\ufffd·(unicode·replacement
46 ··character).·Same·applies·to·printing·of·output.77 ··character).·Same·applies·to·printing·of·output.
47 *·Mark·stdin·broken·on·Windows.78 *·Mark·stdin·broken·on·Windows.
  
48 0.6.1·(2018-05-02)79 0.6.1·(2018-05-02)
49 ------------------80 ------------------
  
50 *·Maintenance·release·to·add·some·tests·for·executable·resolution.81 *·Maintenance·release·to·add·some·tests·for·executable·resolution.
  
51 0.6.0·(2018-05-02)82 0.6.0·(2018-05-02)
52 ------------------83 ------------------
  
53 *·Fix·Win32·API·executable·resolution·for·commands·containing·a·dot·('.')·in84 *·Fix·Win32·API·executable·resolution·for·commands·containing·a·dot·('.')·in
54 ··addition·to·a·file·extension·(say·'.bat').85 ··addition·to·a·file·extension·(say·'.bat').
  
55 0.5.1·(2018-04-27)86 0.5.1·(2018-04-27)
56 ------------------87 ------------------
  
57 *·Fix·Win32API·dependency·installation·on·Windows.88 *·Fix·Win32API·dependency·installation·on·Windows.
  
58 0.5.0·(2018-04-26)89 0.5.0·(2018-04-26)
59 ------------------90 ------------------
  
60 *·New·keyword·'win32resolve'·which·only·takes·effect·on·Windows·and·is·enabled91 *·New·keyword·'win32resolve'·which·only·takes·effect·on·Windows·and·is·enabled
61 ··by·default.·This·causes·procrunner·to·call·the·Win32·API·FindExecutable()92 ··by·default.·This·causes·procrunner·to·call·the·Win32·API·FindExecutable()
62 ··function·to·try·and·lookup·non-.exe·files·with·the·corresponding·name.·This93 ··function·to·try·and·lookup·non-.exe·files·with·the·corresponding·name.·This
63 ··means·.bat/.cmd/etc..·files·can·now·be·run·without·explicitly·specifying94 ··means·.bat/.cmd/etc..·files·can·now·be·run·without·explicitly·specifying
Max diff block lines reached; 388/4771 bytes (8.13%) of diff not shown.
10.1 KB
./usr/lib/python3/dist-packages/procrunner-1.1.0.egg-info/PKG-INFO vs.
./usr/lib/python3/dist-packages/procrunner-2.3.0.egg-info/PKG-INFO
Files 23% similar despite different names
    
Offset 1, 15 lines modifiedOffset 1, 18 lines modified
1 Metadata-Version:·1.11 Metadata-Version:·1.2
2 Name:·procrunner2 Name:·procrunner
3 Version:·1.1.03 Version:·2.3.0
4 Summary:·Versatile·utility·function·to·run·external·processes4 Summary:·Versatile·utility·function·to·run·external·processes
5 Home-page:·https://github.com/DiamondLightSource/python-procrunner5 Home-page:·https://github.com/DiamondLightSource/python-procrunner
6 Author:·Markus·Gerstel6 Author:·Markus·Gerstel
7 Author-email:·scientificsoftware@diamond.ac.uk7 Author-email:·scientificsoftware@diamond.ac.uk
8 License:·BSD·license8 License:·BSD·license
 9 Project-URL:·Documentation,·https://procrunner.readthedocs.io/
 10 Project-URL:·GitHub,·https://github.com/DiamondLightSource/python-procrunner
 11 Project-URL:·Bug-Tracker,·https://github.com/DiamondLightSource/python-procrunner/issues
9 Description:·==========12 Description:·==========
10 ········ProcRunner13 ········ProcRunner
11 ········==========14 ········==========
12 ········15 ········
13 ········16 ········
14 ········..·image::·https://img.shields.io/pypi/v/procrunner.svg17 ········..·image::·https://img.shields.io/pypi/v/procrunner.svg
15 ················:target:·https://pypi.python.org/pypi/procrunner18 ················:target:·https://pypi.python.org/pypi/procrunner
Offset 27, 18 lines modifiedOffset 30, 14 lines modified
27 ················:target:·https://ci.appveyor.com/project/Anthchirp/python-procrunner30 ················:target:·https://ci.appveyor.com/project/Anthchirp/python-procrunner
28 ················:alt:·Build·status31 ················:alt:·Build·status
29 ········32 ········
30 ········..·image::·https://readthedocs.org/projects/procrunner/badge/?version=latest33 ········..·image::·https://readthedocs.org/projects/procrunner/badge/?version=latest
31 ················:target:·https://procrunner.readthedocs.io/en/latest/?badge=latest34 ················:target:·https://procrunner.readthedocs.io/en/latest/?badge=latest
32 ················:alt:·Documentation·Status35 ················:alt:·Documentation·Status
33 ········36 ········
34 ········..·image::·https://pyup.io/repos/github/DiamondLightSource/python-procrunner/shield.svg 
35 ················:target:·https://pyup.io/repos/github/DiamondLightSource/python-procrunner/ 
36 ················:alt:·Updates 
37 ········ 
38 ········..·image::·https://img.shields.io/pypi/pyversions/procrunner.svg37 ········..·image::·https://img.shields.io/pypi/pyversions/procrunner.svg
39 ················:target:·https://pypi.python.org/pypi/procrunner38 ················:target:·https://pypi.python.org/pypi/procrunner
40 ················:alt:·Supported·Python·versions39 ················:alt:·Supported·Python·versions
41 ········40 ········
42 ········..·image::·https://img.shields.io/badge/code%20style-black-000000.svg41 ········..·image::·https://img.shields.io/badge/code%20style-black-000000.svg
43 ················:target:·https://github.com/ambv/black42 ················:target:·https://github.com/ambv/black
44 ················:alt:·Code·style:·black43 ················:alt:·Code·style:·black
Offset 51, 159 lines modifiedOffset 50, 173 lines modified
51 ········50 ········
52 ········Features51 ········Features
53 ········--------52 ········--------
54 ········53 ········
55 ········*·runs·an·external·process·and·waits·for·it·to·finish54 ········*·runs·an·external·process·and·waits·for·it·to·finish
56 ········*·does·not·deadlock,·no·matter·the·process·stdout/stderr·output·behaviour55 ········*·does·not·deadlock,·no·matter·the·process·stdout/stderr·output·behaviour
57 ········*·returns·the·exit·code,·stdout,·stderr·(separately,·both·as·bytestrings),56 ········*·returns·the·exit·code,·stdout,·stderr·(separately,·both·as·bytestrings),
58 ··········and·the·total·process·runtime·as·a·dictionary57 ··········as·a·subprocess.CompletedProcess·object
59 ········*·process·can·run·in·a·custom·environment,·either·as·a·modification·of58 ········*·process·can·run·in·a·custom·environment,·either·as·a·modification·of
60 ··········the·current·environment·or·in·a·new·environment·from·scratch59 ··········the·current·environment·or·in·a·new·environment·from·scratch
 60 ········*·stdin·can·be·fed·to·the·process
61 ········*·stdin·can·be·fed·to·the·process,·the·returned·dictionary·contains 
62 ··········information·how·much·was·read·by·the·process 
63 ········*·stdout·and·stderr·is·printed·by·default,·can·be·disabled61 ········*·stdout·and·stderr·is·printed·by·default,·can·be·disabled
64 ········*·stdout·and·stderr·can·be·passed·to·any·arbitrary·function·for62 ········*·stdout·and·stderr·can·be·passed·to·any·arbitrary·function·for
65 ··········live·processing·(separately,·both·as·unicode·strings)63 ··········live·processing·(separately,·both·as·unicode·strings)
66 ········*·optionally·enforces·a·time·limit·on·the·process64 ········*·optionally·enforces·a·time·limit·on·the·process,·raising·a
 65 ··········subprocess.TimeoutExpired·exception·if·it·is·exceeded.
 66 ········
67 ········67 ········
68 ········Credits68 ········Credits
69 ········-------69 ········-------
70 ········70 ········
71 ········This·package·was·created·with·Cookiecutter_·and·the·`audreyr/cookiecutter-pypackage`_·project·template.71 ········This·package·was·created·with·Cookiecutter_·and·the·`audreyr/cookiecutter-pypackage`_·project·template.
72 ········72 ········
73 ········..·_Cookiecutter:·https://github.com/audreyr/cookiecutter73 ········..·_Cookiecutter:·https://github.com/audreyr/cookiecutter
74 ········..·_`audreyr/cookiecutter-pypackage`:·https://github.com/audreyr/cookiecutter-pypackage74 ········..·_`audreyr/cookiecutter-pypackage`:·https://github.com/audreyr/cookiecutter-pypackage
75 ········75 ········
76 ········76 ········
77 ········=======77 ········=======
78 ········History78 ········History
79 ········=======79 ········=======
80 ········80 ········
81 ········1.1.0·(2019-11-04)81 ········2.3.0·(2020-10-29)
82 ········------------------82 ········------------------
 83 ········*·Add·Python·3.9·support,·drop·Python·3.5·support
 84 ········*·Fix·a·file·descriptor·leak·on·subprocess·execution
83 ········85 ········
 86 ········2.2.0·(2020-09-07)
 87 ········------------------
 88 ········*·Calling·the·run()·function·with·unnamed·arguments·(other·than·the·command
 89 ··········list·as·the·first·argument)·is·now·deprecated.·As·a·number·of·arguments
 90 ··········will·be·removed·in·a·future·version·the·use·of·unnamed·arguments·will
 91 ··········cause·future·confusion.·`Use·explicit·keyword·arguments·instead·(#62).·<https://github.com/DiamondLightSource/python-procrunner/pull/62>`_
 92 ········*·`The·run()·function·debug·argument·has·been·deprecated·(#63).·<https://github.com/DiamondLightSource/python-procrunner/pull/63>`_
 93 ··········This·is·only·used·to·debug·the·NonBlockingStream*·classes.·Those·are·due
 94 ··········to·be·replaced·in·a·future·release,·so·the·argument·will·no·longer·serve
 95 ··········a·purpose.·Debugging·information·remains·available·via·standard·logging
 96 ··········mechanisms.
 97 ········*·Final·version·supporting·Python·3.5
 98 ········
 99 ········2.1.0·(2020-09-05)
 100 ········------------------
 101 ········*·`Deprecated·array·access·on·the·return·object·(#60).·<https://github.com/DiamondLightSource/python-procrunner/pull/60>`_
 102 ··········The·return·object·will·become·a·subprocess.CompletedProcess·in·a·future
 103 ··········release,·which·no·longer·allows·array-based·access.·For·a·translation·table
 104 ··········of·array·elements·to·attributes·please·see·the·pull·request·linked·above.
 105 ········*·Add·a·`new·parameter·'raise_timeout_exception'·(#61).·<https://github.com/DiamondLightSource/python-procrunner/pull/61>`_
 106 ··········When·set·to·'True'·a·subprocess.TimeoutExpired·exception·is·raised·when·the
 107 ··········process·runtime·exceeds·the·timeout·threshold.·This·defaults·to·'False'·and
 108 ··········will·be·set·to·'True'·in·a·future·release.
 109 ········
 110 ········2.0.0·(2020-06-24)
 111 ········------------------
 112 ········*·Python·3.5+·only,·support·for·Python·2.7·has·been·dropped
 113 ········*·Deprecated·function·alias·run_process()·has·been·removed
 114 ········*·Fixed·a·stability·issue·on·Windows
 115 ········
 116 ········1.1.0·(2019-11-04)
 117 ········------------------
84 ········*·Add·Python·3.8·support,·drop·Python·3.4·support118 ········*·Add·Python·3.8·support,·drop·Python·3.4·support
85 ········119 ········
86 ········1.0.2·(2019-05-20)120 ········1.0.2·(2019-05-20)
87 ········------------------121 ········------------------
88 ········ 
89 ········*·Stop·environment·override·variables·leaking·into·the·process·environment122 ········*·Stop·environment·override·variables·leaking·into·the·process·environment
90 ········123 ········
91 ········1.0.1·(2019-04-16)124 ········1.0.1·(2019-04-16)
92 ········------------------125 ········------------------
93 ········ 
94 ········*·Minor·fixes·on·the·return·object·(implement·equality,126 ········*·Minor·fixes·on·the·return·object·(implement·equality,
95 ··········mark·as·unhashable)127 ··········mark·as·unhashable)
96 ········128 ········
97 ········1.0.0·(2019-03-25)129 ········1.0.0·(2019-03-25)
98 ········------------------130 ········------------------
99 ········ 
100 ········*·Support·file·system·path·objects·(PEP-519)·in·arguments131 ········*·Support·file·system·path·objects·(PEP-519)·in·arguments
101 ········*·Change·the·return·object·to·make·it·similar·to132 ········*·Change·the·return·object·to·make·it·similar·to
102 ··········subprocess.CompletedProcess,·introduced·with·Python·3.5+133 ··········subprocess.CompletedProcess,·introduced·with·Python·3.5+
Max diff block lines reached; 3898/10175 bytes (38.31%) of diff not shown.