25.2 KB
python-procrunner version 1.1.0-1~jan+unchanged1 (unchanged) vs.
python-procrunner version 2.3.0-1~jan+nur1 (fresh-releases)
25.1 KB
python3-procrunner_2.3.0-1_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.25 KB
control.tar.xz
2.23 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
667 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:·2.3.0-13 Version:·2.3.0-1
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
893 B
./md5sums
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
22.4 KB
data.tar.xz
22.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
4.98 KB
./usr/lib/python3/dist-packages/procrunner/__init__.py
    
Offset 522, 108 lines modifiedOffset 593, 85 lines modified
522 ········#·check·if·process·is·still·running593 ········#·check·if·process·is·still·running
523 ········p.poll()594 ········p.poll()
  
524 ····if·p.returncode·is·None:595 ····if·p.returncode·is·None:
525 ········#·timeout·condition596 ········#·timeout·condition
526 ········timeout_encountered·=·True597 ········timeout_encountered·=·True
527 ········if·debug:598 ········if·debug:
528 ············logger.debug("timeout·(T%.2fs)"·%·(timeit.default_timer()·-·max_time))599 ············logger.debug("timeout·(T%.2fs)",·timeit.default_timer()·-·max_time)
  
529 ········#·send·terminate·signal·and·wait·some·time·for·buffers·to·be·read600 ········#·send·terminate·signal·and·wait·some·time·for·buffers·to·be·read
530 ········p.terminate()601 ········p.terminate()
531 ········if·thread_pipe_pool:602 ········if·thread_pipe_pool:
 603 ············try:
532 ············thread_pipe_pool[0].poll(0.5)604 ················thread_pipe_pool[0].poll(0.5)
 605 ············except·BrokenPipeError·as·e:
 606 ················#·on·Windows·this·raises·"BrokenPipeError:·[Errno·109]·The·pipe·has·been·ended"
 607 ················#·which·is·for·all·intents·and·purposes·equivalent·to·a·True·return·value.
 608 ················if·e.winerror·!=·109:
 609 ····················raise
 610 ················thread_pipe_pool.pop(0)
533 ········if·not·stdout.has_finished()·or·not·stderr.has_finished():611 ········if·not·stdout.has_finished()·or·not·stderr.has_finished():
534 ············time.sleep(2)612 ············time.sleep(2)
535 ········p.poll()613 ········p.poll()
  
536 ····if·p.returncode·is·None:614 ····if·p.returncode·is·None:
537 ········#·thread·still·alive615 ········#·thread·still·alive
538 ········#·send·kill·signal·and·wait·some·more·time·for·buffers·to·be·read616 ········#·send·kill·signal·and·wait·some·more·time·for·buffers·to·be·read
539 ········p.kill()617 ········p.kill()
540 ········if·thread_pipe_pool:618 ········if·thread_pipe_pool:
 619 ············try:
541 ············thread_pipe_pool[0].poll(0.5)620 ················thread_pipe_pool[0].poll(0.5)
 621 ············except·BrokenPipeError·as·e:
 622 ················#·on·Windows·this·raises·"BrokenPipeError:·[Errno·109]·The·pipe·has·been·ended"
 623 ················#·which·is·for·all·intents·and·purposes·equivalent·to·a·True·return·value.
 624 ················if·e.winerror·!=·109:
 625 ····················raise
 626 ················thread_pipe_pool.pop(0)
542 ········if·not·stdout.has_finished()·or·not·stderr.has_finished():627 ········if·not·stdout.has_finished()·or·not·stderr.has_finished():
543 ············time.sleep(5)628 ············time.sleep(5)
544 ········p.poll()629 ········p.poll()
  
545 ····if·p.returncode·is·None:630 ····if·p.returncode·is·None:
546 ········raise·RuntimeError("Process·won't·terminate")631 ········raise·RuntimeError("Process·won't·terminate")
  
547 ····runtime·=·timeit.default_timer()·-·start_time632 ····runtime·=·timeit.default_timer()·-·start_time
548 ····if·timeout·is·not·None:633 ····if·timeout·is·not·None:
549 ········logger.debug(634 ········logger.debug(
550 ············"Process·ended·after·%.1f·seconds·with·exit·code·%d·(T%.2fs)"635 ············"Process·ended·after·%.1f·seconds·with·exit·code·%d·(T%.2fs)",
 636 ············runtime,
 637 ············p.returncode,
551 ············%·(runtime,·p.returncode,·timeit.default_timer()·-·max_time)638 ············timeit.default_timer()·-·max_time,
552 ········)639 ········)
553 ····else:640 ····else:
554 ········logger.debug(641 ········logger.debug(
555 ············"Process·ended·after·%.1f·seconds·with·exit·code·%d"642 ············"Process·ended·after·%.1f·seconds·with·exit·code·%d",·runtime,·p.returncode
556 ············%·(runtime,·p.returncode) 
557 ········)643 ········)
  
558 ····stdout·=·stdout.get_output()644 ····stdout·=·stdout.get_output()
559 ····stderr·=·stderr.get_output()645 ····stderr·=·stderr.get_output()
560 ····time_end·=·time.strftime("%Y-%m-%d·%H:%M:%S·GMT",·time.gmtime()) 
  
 646 ····if·timeout_encountered·and·raise_timeout_exception:
 647 ········raise·subprocess.TimeoutExpired(
 648 ············cmd=command,·timeout=timeout,·output=stdout,·stderr=stderr
 649 ········)
  
 650 ····time_end·=·time.strftime("%Y-%m-%d·%H:%M:%S·GMT",·time.gmtime())
561 ····result·=·ReturnObject(651 ····result·=·ReturnObject(
562 ········{ 
563 ············"exitcode":·p.returncode,652 ········exitcode=p.returncode,
564 ············"command":·command,653 ········command=command,
565 ············"stdout":·stdout,654 ········stdout=stdout,
566 ············"stderr":·stderr,655 ········stderr=stderr,
567 ············"timeout":·timeout_encountered,656 ········timeout=timeout_encountered,
568 ············"runtime":·runtime,657 ········runtime=runtime,
 658 ········time_start=time_start,
 659 ········time_end=time_end,
569 ············"time_start":·time_start, 
570 ············"time_end":·time_end, 
571 ········} 
572 ····)660 ····)
573 ····if·stdin·is·not·None:661 ····if·stdin·is·not·None:
574 ········result.update(662 ········result.update(
575 ············{663 ············{
576 ················"stdin_bytes_sent":·stdin.bytes_sent(),664 ················"stdin_bytes_sent":·stdin.bytes_sent(),
577 ················"stdin_bytes_remain":·stdin.bytes_remaining(),665 ················"stdin_bytes_remain":·stdin.bytes_remaining(),
578 ············}666 ············}
579 ········)667 ········)
  
580 ····return·result668 ····return·result
  
  
581 def·run_process_dummy(command,·**kwargs): 
582 ····""" 
583 ····A·stand-in·function·that·returns·a·valid·result·dictionary·indicating·a 
584 ····successful·execution.·The·external·process·is·not·run. 
585 ····""" 
586 ····warnings.warn( 
587 ········"procrunner.run_process_dummy()·is·deprecated",·DeprecationWarning,·stacklevel=2 
588 ····) 
  
589 ····time_start·=·time.strftime("%Y-%m-%d·%H:%M:%S·GMT",·time.gmtime()) 
590 ····logger.info("run_process·is·disabled.·Requested·command:·%s",·command) 
  
591 ····result·=·ReturnObject( 
592 ········{ 
593 ············"exitcode":·0, 
594 ············"command":·command, 
595 ············"stdout":·"", 
596 ············"stderr":·"", 
597 ············"timeout":·False, 
598 ············"runtime":·0, 
599 ············"time_start":·time_start, 
600 ············"time_end":·time_start, 
601 ········} 
602 ····) 
603 ····if·kwargs.get("stdin")·is·not·None: 
604 ········result.update( 
605 ············{"stdin_bytes_sent":·len(kwargs["stdin"]),·"stdin_bytes_remain":·0} 
606 ········) 
607 ····return·result 
  
  
608 def·run_process(*args,·**kwargs): 
609 ····"""API·used·up·to·version·0.2.0.""" 
610 ····warnings.warn( 
Max diff block lines reached; -1/4993 bytes (-0.02%) of diff not shown.
636 B
./usr/share/doc/python3-procrunner/changelog.Debian.gz
528 B
changelog.Debian
    
Offset 1, 11 lines modifiedOffset 1, 10 lines modified
1 python-procrunner·(2.3.0-1)·unchanged;·urgency=low1 python-procrunner·(2.3.0-1)·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.
8.38 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 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+
103 ········134 ········
104 ········0.9.1·(2019-02-22)135 ········0.9.1·(2019-02-22)
105 ········------------------136 ········------------------
106 ········ 
107 ········*·Have·deprecation·warnings·point·to·correct·code·locations137 ········*·Have·deprecation·warnings·point·to·correct·code·locations
108 ········138 ········
109 ········0.9.0·(2018-12-07)139 ········0.9.0·(2018-12-07)
110 ········------------------140 ········------------------
111 ········ 
112 ········*·Trap·UnicodeEncodeError·when·printing·output.·Offending·characters141 ········*·Trap·UnicodeEncodeError·when·printing·output.·Offending·characters
113 ··········are·replaced·and·a·warning·is·logged·once.·Hints·at·incorrectly·set142 ··········are·replaced·and·a·warning·is·logged·once.·Hints·at·incorrectly·set
114 ··········PYTHONIOENCODING.143 ··········PYTHONIOENCODING.
115 ········144 ········
116 ········0.8.1·(2018-12-04)145 ········0.8.1·(2018-12-04)
117 ········------------------146 ········------------------
118 ········ 
119 ········*·Fix·a·few·deprecation·warnings147 ········*·Fix·a·few·deprecation·warnings
120 ········148 ········
121 ········0.8.0·(2018-10-09)149 ········0.8.0·(2018-10-09)
122 ········------------------150 ········------------------
123 ········ 
124 ········*·Add·parameter·working_directory·to·set·the·working·directory151 ········*·Add·parameter·working_directory·to·set·the·working·directory
125 ··········of·the·subprocess152 ··········of·the·subprocess
126 ········153 ········
127 ········0.7.2·(2018-10-05)154 ········0.7.2·(2018-10-05)
128 ········------------------155 ········------------------
129 ········ 
130 ········*·Officially·support·Python·3.7156 ········*·Officially·support·Python·3.7
131 ········157 ········
132 ········0.7.1·(2018-09-03)158 ········0.7.1·(2018-09-03)
133 ········------------------159 ········------------------
134 ········ 
135 ········*·Accept·environment·variable·overriding·with·numeric·values.160 ········*·Accept·environment·variable·overriding·with·numeric·values.
136 ········161 ········
137 ········0.7.0·(2018-05-13)162 ········0.7.0·(2018-05-13)
138 ········------------------163 ········------------------
139 ········ 
140 ········*·Unicode·fixes.·Fix·crash·on·invalid·UTF-8·input.164 ········*·Unicode·fixes.·Fix·crash·on·invalid·UTF-8·input.
Max diff block lines reached; 2732/8406 bytes (32.50%) of diff not shown.