我正在尝试使用python库子进程运行控制台命令。 这是我得到的:
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:37:02) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> import os
>>> os.system("echo Hello, World!")
Hello, World!
0
>>> subprocess.run(["echo", "Hello, World!"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:UserstroloAppDataLocalProgramsPythonPython38libsubprocess.py", line 489, in run
with Popen(*popenargs, **kwargs) as process:
File "C:UserstroloAppDataLocalProgramsPythonPython38libsubprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:UserstroloAppDataLocalProgramsPythonPython38libsubprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified
要运行像echo
这样的 shell 命令,你需要shell=True
; 然后第一个参数应该只是一个字符串,而不是字符串列表。
subprocess.run('echo "Hello world!"', shell=True)
FileNotFoundError
表示子进程.run参数列表中的第一个参数不存在(在本例中,"echo"不存在(。
echo
是一个shell命令(不是可执行文件(,根据python文档:
与其他一些 popen 函数不同,此实现永远不会隐式调用系统 shell。
要解决此问题,请添加shell=True
参数:
subprocess.run(["echo", "Hello, World!"], shell=True)
编辑:如评论中所述,显然非Windows系统要求所有参数都是单个字符串:
subprocess.run(["echo Hello, World!"], shell=True)
或
subprocess.run("echo Hello, World!", shell=True)