繁体   English   中英

Popen(shlex.split(command),shell = False,stdin = PIPE)错误WindowsError:[错误2]系统找不到指定的文件

[英]Popen(shlex.split(command), shell=False, stdin=PIPE) error WindowsError: [Error 2] The system cannot find the file specified

我正在尝试让Windows上运行的shell = False的Popen命令运行,而对我而言,我无法使其正常运行。 iTMSTransporter是一个命令行应用程序。 这是我当前的代码:

import os
import shlex
import subprocess
from subprocess import Popen, PIPE, STDOUT

link = "C:/progra~1/itms/iTMSTransporter"
link1 = os.path.normpath(link)
link2 = "C:/Temp/test1.itmsp"
link3 = os.path.normpath(link2)
link4 = os.path.join(link3, "LogFile.txt")

command = link1 + " -m verify -f " + link3 +" -u username -p password -o " + link4 + " -s provider -v eXtreme"
process = Popen(shlex.split(command), shell=False, stdin=PIPE)

这给了我错误:

Traceback (most recent call last):
  File "C:\Temp\temp.py", line 13, in <module>
    process = Popen(shlex.split(command), shell=False, stdin=PIPE)
  File "C:\Python27\lib\subprocess.py", line 709, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

我敢肯定progra〜1不是问题,因为它可用于shell = True,并且也尝试过Program Files,结果相同。 有什么想法可以在Windows平台Python 2.7上运行吗?

经过大量研究,我发现了如何做到这一点,以供参考,这就是我的做法:

import os
import subprocess
from subprocess import Popen, PIPE, STDOUT

link = "C:/progra~1/itms/iTMSTransporter.cmd"
link1 = os.path.normpath(link)
link2 = "C:/Temp/test1.itmsp"
link3 = os.path.normpath(link2)
link4 = os.path.join(link3, "LogFile.txt")

command = link1 + " -m verify -f " + link3 +" -u username -p password -o " + link4 + " -s provider -v eXtreme"
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
process = Popen(command, startupinfo=startupinfo, shell=False)

在输入文件中添加.cmd并删除shlex模块可以解决问题,并添加代码以停止打开命令窗口。

shlex.split到目前为止(即使posix=0 )也不适合Windows命令行,也没有必要。 有关更多详细信息,请参见python,windows:使用shlex解析命令行

shlex类使您可以轻松地为类似于Unix shell的简单语法编写词法分析器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM