gpt4 book ai didi

python - subprocess.call() 在 Mac 和 Linux 上失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:09 26 4
gpt4 key购买 nike

我在使用 subprocess.call() 函数时遇到了一个奇怪的问题。我正在尝试使用 subprocess.call() 执行 Java 的“jar”命令。这是代码:

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 添加到调用中。在 Windows 上,CreateProcess 命令执行字符串解析以分隔命令及其各种参数。在 linux 上,如果您专门告诉子进程调用 shell,您只会得到字符串处理。否则,它会将您提交的整个字符串视为命令,而您不会走得太远。

subprocess.call(jar_cmd, shell=True)

关于python - subprocess.call() 在 Mac 和 Linux 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23258660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com