- subprocess.run()的使用
首先肯定需要import啊
import subprocess
(如果没安装的话需要在命令行里输入pip install subprocess安装。)
我用的python版本是3.8.2,找到subprocess.run的函数声明如下:
def run(\*popenargs, input=None, capture_output=False, timeout=None, check=False, \*\*kwargs):
第一个参数是*popenargs,*号代表序列或tuple(即(a,b,c)形式的元组),所以我们应该这样使用:
cmdTuple =("cmd.exe", "/C", r"del d:\output\*.png")
subprocess.run(cmdTuple)
这个例子是要删除d:\output\里的png图片,cmdTuple是有3个元素的元组,第一个元素是"cmd.exe",代表run()要启动的程序, 第二个元素“/C”是cmd.exe 的命令行参数,意思是“执行字符串指定的命令然后终止“,可能是说启动一个cmd,执行完命令后,就自动退出cmd.exe吧,第三个元素自然是要执行的cmd命令,必须要这样写,一开始我不知道需要传递元组,用下面错误的办法调用run:
cmd ="del d:\output\*.png"
subprocess.run(cmd)
总是会报错,报的错误是
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\Program Files\Python38-2\lib\subprocess.py", line 489, in run
with Popen(*popenargs, \*\*kwargs) as process: File "D:\Program Files\Python38-2\lib\subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds, File "D:\Program Files\Python38-2\lib\subprocess.py", line 1307, in
_execute_c hild
hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] 系统找不到指定的文件。
这个错误的原因就是cmd 里没写cmd.exe,subprocess.run是要启动一个exe的,如果没写cmd.exe当然找不到指定的文件了
用subprocess.run的好处是cmd输出会直接输出到当前cmd窗口,就跟os.system()效果一样,比os.system好用的地方是支持反斜杠的路径如 d:/output/*.png,os.system遇到这样的路径可能识别不了,反正用subprocess.run都能识别。
参考博客:1.关于python函数参数中的*和**的介绍
2.subprocess的中文介绍网站
3.关于系统找不到指定的文件错误的解释