[英]Executing Python script using subprocess behaves differently on Ubuntu and Windows machines
您能否帮助检查子进程的情况,它在具有相同Python版本的不同计算机上的执行情况不同,但是一个在Ubuntu docker上运行,另一个在Windows上运行。
我使用子进程执行带有参数shell=True
的外部Python脚本,实际上它为我打开了一个新进程,而不执行指定的脚本,因此我必须删除参数shell=True
,然后一切正常。
您可以从下面的屏幕快照中看到,我需要在执行第一个子进程之后exit()
并运行没有shell=True
的第二个子进程。
在Windows中, shell=True
工作原理与我在没有shell=True
参数的情况下在Ubuntu中执行子进程相同。
引用https://docs.python.org/3/library/subprocess.html#popen-constructor :
在shell = True的POSIX上,shell默认为/ bin / sh。 如果args是字符串,则该字符串指定要通过外壳执行的命令。 这意味着字符串的格式必须与在shell提示符下键入时的格式完全相同。 例如,这包括在文件名中使用引号或反斜杠转义。 如果args是序列,则第一项指定命令字符串,任何其他项都将被视为shell本身的其他参数。
(强调我的)
这意味着,在您第一个使用run(['python', 'script.py'], shell=True)
示例中,您实际上只是在开始一个交互式Python会话,而没有将脚本传递给解释器。
进一步:
在Windows上唯一需要指定shell = True的时间是将要执行的命令内置到shell中(例如dir或copy)。 您不需要shell = True即可运行批处理文件或基于控制台的可执行文件。
结论:尽可能将参数作为列表传递(与您一样),但不要使用shell=True
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.