Python/Shell: Difference between revisions

From Fundamental Ramen
Jump to navigation Jump to search
No edit summary
 
(One intermediate revision by the same user not shown)
Line 21: Line 21:
|}
|}


== Gracefully use subprocess.run() on Windows ==
<source lang="python3">
<source lang="python3">
import subprocess
import subprocess
Line 29: Line 30:
     message = ''
     message = ''
     indent  = '    '
     indent  = '    '
    charset = 'cp950'


     try:
     try:
         comp = subprocess.run(cmd, check=True, capture_output=True)
         comp = subprocess.run(cmd, check=True, capture_output=True)
         stdout = comp.stdout.decode('cp950').strip()
         summary = "Okay:"
        print('Okay:')
        message = comp.stdout.decode(charset).strip()
        for line in stdout.split('\n'):
            print(indent + line)
        print()
        return
     except subprocess.CalledProcessError as ex:
     except subprocess.CalledProcessError as ex:
         summary = 'Returned error (%s):' % type(ex).__name__
         summary = 'Error returned (%s):' % type(ex).__name__
         message = str(ex)
         message = "return code: %d\n%s" % (ex.returncode, ex.stderr.decode(charset))
        message = message.strip()
     except FileNotFoundError as ex:
     except FileNotFoundError as ex:
         summary = 'No such executable (%s):' % type(ex).__name__
         summary = 'No such executable (%s):' % type(ex).__name__
         message = str(ex)
         message = ex.strerror
     except Exception as ex:
     except Exception as ex:
         summary = 'Unknown error (%s):' % type(ex).__name__
         summary = 'Unknown error (%s):' % type(ex).__name__
Line 49: Line 48:


     print(summary)
     print(summary)
     print(indent + message)
     for line in message.split('\n'):
        print(indent + line)
     print()
     print()



Latest revision as of 08:53, 24 April 2020

TODO Code
Just run
subprocess.run(['dpkg', '-x', deb_path, ex_path])
Run with shell
(Necessary on Windows)
args = 'wmic product get name,version'.split(' ')
subprocess.run(args, shell=True)
Get stdout
args = 'wmic product get name,version'.split(' ')
completed = subprocess.run(args, shell=True, capture_output=True)
lines = completed.stdout.decode('cp950').split('\r\n')

Gracefully use subprocess.run() on Windows

import subprocess
import sys

def run(cmd):
    summary = ''
    message = ''
    indent  = '    '
    charset = 'cp950'

    try:
        comp = subprocess.run(cmd, check=True, capture_output=True)
        summary = "Okay:"
        message = comp.stdout.decode(charset).strip()
    except subprocess.CalledProcessError as ex:
        summary = 'Error returned (%s):' % type(ex).__name__
        message = "return code: %d\n%s" % (ex.returncode, ex.stderr.decode(charset))
        message = message.strip()
    except FileNotFoundError as ex:
        summary = 'No such executable (%s):' % type(ex).__name__
        message = ex.strerror
    except Exception as ex:
        summary = 'Unknown error (%s):' % type(ex).__name__
        message = str(ex)

    print(summary)
    for line in message.split('\n'):
        print(indent + line)
    print()

def main():
    run(['tasklist.exe', '/fi', 'imagename eq line.exe'])
    run(['tasklist.exe', '/fuck', 'imagename eq line.exe'])
    run(['tasklist.ex', '/fi', 'imagename eq line.exe'])

if __name__ == '__main__':
    main()