你shlex.split()
破坏因为删除\字符的路径让我们来看看?:
import shlex
command = "C:\\progra~2\\itms\\iTMSTransporter -m verify -f Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp -u username -p password -o /Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp/LOGFILE.txt -s provider -v eXtreme"
print shlex.split(command)
['C:progra~2itmsiTMSTransporter', '-m', 'verify', '-f', '/Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp', '-u', 'username', '-p', 'password', '-o', '/Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp/LOGFILE.txt', '-s', 'provider', '-v', 'eXtreme']
正如你所看到的,路径可执行文件是不正确(C:progra~2itmsiTMSTransporter
),所以POPEN无法找到它。
更改路径分隔符/
,这是在Linux/Windows环境的安全:
command = "C:/progra~2/itms/iTMSTransporter -m verify -f Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp -u username -p password -o /Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp/LOGFILE.txt -s provider -v eXtreme"
print shlex.split(command)
['C:/progra~2/itms/iTMSTransporter', '-m', 'verify', '-f', 'Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp', '-u', 'username', '-p', 'password', '-o', '/Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp/LOGFILE.txt', '-s', 'provider', '-v', 'eXtreme']
Popen()
正确处理这条道路。
您尝试通过指定可执行文件的路径来运行命令。 '/ usr/local/itms/share/iTMSTransporter.woa/iTMSTransporter'是文件系统中的路径。在Windows中,文件系统路径以驱动器号开头。没有办法,这是Windows上的有效路径。因此,这个错误很明显,我会说。 –
对不起,你是对的!我的意思是改变路径到一个Windows路径,我已经完成了。我已经更新了这个问题。 – speedyrazor
您应该转义命令并且不要使用代字号: command =“\”C:\\ program files \\ itms \\ iTMSTransporter.exe \“... –