我遇到了一個奇怪的問題與subprocess.call()函數。我正在嘗試使用subprocess.call()來執行Java的'jar'命令。代碼如下:subprocess.call()在Mac和Linux上失敗
import os
import subprocess
def read_war():
war_file_path = "jackrabbit-webapp-2.6.5.war"
java_home = os.environ['JAVA_HOME']
jar_path = os.path.join(java_home, 'bin', 'jar')
jar_cmd = jar_path + ' tvf ' + war_file_path
print "command to be executed is : " + jar_cmd
subprocess.call(jar_cmd)
read_war()
我在Windows和Linux(Oracle Enterprise Linux)上都使用Python v2.7.3。 在Windows 7上,我看到正在顯示的war文件的內容。在Linux上,但是,我看到了「沒有這樣的文件或目錄」錯誤:
$ python example.py
command to be executed is : /usr/local/tools/jdk1.7.0_15/bin/jar tvf jackrabbit-webapp-2.6.5.war
Traceback (most recent call last):
File "example.py", line 24, in <module>
read_war()
File "example.py", line 23, in read_war
subprocess.call(jar_cmd)
File "/usr/local/tools/Python-2.7.3/Lib/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/local/tools/Python-2.7.3/Lib/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/local/tools/Python-2.7.3/Lib/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
$
我試着命令「/usr/local/tools/jdk1.7.0_15/bin/jar TVF jackrabbit- webapp-2.6.5.war'從命令提示符,它工作正常。所以,這個命令沒什麼問題。 我已經嘗試了subprocess.call()的各種組合 - 傳遞一個字符串,傳遞一個列表等。他們都沒有工作。任何幫助都將不勝感激。
通過使用shell = True解決tdelaney建議。我可以發誓我使用了這種方法,但失敗了。一定是操作員錯誤。再次感謝。 –