python - subprocess.run 调用可执行文件失败
问题描述
我正在尝试从 Python 程序中执行 Java 程序。
import subprocess
subprocess.run("ls") # ok
subprocess.run("whoami") # ok
subprocess.run("java --version") # not ok
我可以运行标准的 shell 命令,但不能运行Java 可执行文件。这是为什么?
Traceback (most recent call last):
File "syscall.py", line 4, in <module>
subprocess.run("java --version") # not ok
File "/usr/lib/python3.6/subprocess.py", line 423, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'java --version': 'java --version'
解决方案
您不能将完整的命令传递给subprocess.run
. 它接受用于启动子进程的已解析令牌列表。
subprocess.run(["java", "--version"])
subprocess.run(["ls", "-l"])
绕过的一种方法是传递shell=True
给run
,但不建议这样做。
您也可以使用自动进行拆分shlex.split
subprocess.run(shlex.split("java --version"))
推荐阅读
- angular-services - Angular ERROR ReferenceError: toastr is not defined
- apache-kafka-streams - Kafka Streams Rocksdb 保留没有使用窗口函数删除旧数据
- python - 根据条件将字符串值替换为前一行值 - Pandas
- php - INSERT 语句给了我 '' 空字符串,但它似乎需要为空
- html - 如何将边距底部放在垫子表中(Angular 4+)?
- java - How to debug two applications running in two different Tomcat servers?
- amazon-web-services - bcrypt Lambda 自动扩展 - 您是否在花钱请别人破解您的系统?
- c# - 如何获取列的类型并在c#中使用它
- javascript - 通过预览上传来动态更改图像
- date - 如何比较 dd/mm/yyyy 格式的两个日期?