在不同的Windows安装上,子进程调用的行为不同

时间:2019-04-24 13:18:20

标签: python windows subprocess

我有两台非常相似的Windows 7 Enterprise计算机。

但是当我运行这段代码(python 2.73)时,它可以在其中一个代码上运行,而在另一个代码上则不能运行。

command = [
        'artifact',
        'cp',
        source,
        target
    ]

artifact_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

我收到此错误消息:

    artifact_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  File "C:\Python27\lib\subprocess.py", line 390, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 640, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

我尝试使用某些参数运行的“工件”命令只是一个内部开发的Java命令行工具。两台机器都在PATH上,并且可以手动运行相同的命令。

C:\Jenkins\3\workspace>where artifact
C:\Binaries\artifact-cli\artifact
C:\Binaries\artifact-cli\artifact.bat

但是当我尝试通过python脚本和subprocess命令运行它时,它在其中一台机器上失败。 如果我在子过程命令中添加“ shell = True”。然后在两台机器上都可以使用。

我一直在尝试比较这两台机器的设置,试图找到一些差异,这可以帮助解释为什么它可以在一台机器上运行而不能在另一台机器上运行。但是到目前为止,我已经空了。

我真的很想避免使用“ shell = True”,据我了解,我不必进行这样的操作。

问题是。 Windows中什么会导致这种差异?

0 个答案:

没有答案