2014-05-22 14 views
-1

我正在运行此代码在OSX中正常工作但在Windows上导致错误:Python - Windows - Popen(shlex.split(command),shell = False会导致OSError:[Errno 2]没有这样的文件或目录

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" 
self.process1 = Popen(shlex.split(command), shell=False, stdin=PIPE) 

我在Windows recieving的错误是:

WindowsError: [Error 2] The system cannot find the file specified 

为什么给我在Windows这个错误

+3

您尝试通过指定可执行文件的路径来运行命令。 '/ usr/local/itms/share/iTMSTransporter.woa/iTMSTransporter'是文件系统中的路径。在Windows中,文件系统路径以驱动器号开头。没有办法,这是Windows上的有效路径。因此,这个错误很明显,我会说。 –

+0

对不起,你是对的!我的意思是改变路径到一个Windows路径,我已经完成了。我已经更新了这个问题。 – speedyrazor

+0

您应该转义命令并且不要使用代字号: command =“\”C:\\ program files \\ itms \\ iTMSTransporter.exe \“... –

回答

1

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()正确处理这条道路。

+0

我尝试了上述建议,但我仍然得到相同的错误。请有任何想法吗? – speedyrazor

相关问题