我试图运行命令行脚本。 我有 : command.py
import subprocess
proc = subprocess.Popen('python3 hello.py', stdout=subprocess.PIPE)
tmp = proc.stdout.read()
print(tmp)
和hello.py
print("hello")
但它返回错误
FileNotFoundError:[WinError 2]
如何运行命令和打印结果?
答案 0 :(得分:2)
问题是Popen
在您的路径中找不到python3
。
如果主要错误是找不到hello.py
,则会在stderr
(即未读取)中出现此错误
python: can't open file 'hello.py': [Errno 2] No such file or directory
您不会在subprocess
中收到异常,因为python3
已运行但未能找到要执行的python文件。
首先,如果你想运行一个python文件,最好避免在另一个进程中运行它。
但是,如果您仍然想要这样做,最好使用这样的参数列表来运行它,这样就可以正确处理空格并提供所有文件的完整路径。
import subprocess
proc = subprocess.Popen([r'c:\some_dir\python3',r'd:\full_path_to\hello.py'], stdout=subprocess.PIPE)
tmp = proc.stdout.read()
print(tmp)
更进一步:
python3
,最好将其放在系统路径中以避免指定完整路径。改进的代码段:
import subprocess,os
basedir = os.path.dirname(__file__)
proc = subprocess.Popen(['python3',os.path.join(basedir,'hello.py')], stdout=subprocess.PIPE)
tmp = proc.stdout.read()
print(tmp)
另外:Popen
执行传递的第一个参数的execvp
种。如果传递的第一个参数是,例如,.bat
文件,则需要添加cmd /c
前缀或shell=True
以告诉Popen
在shell中创建进程而不是执行直接。