Python中执行程序或调用系统命令的方法
Python中执行程序或调用系统命令的方法
技术背景
在Python编程中,有时需要执行外部程序或调用系统命令来完成特定任务,如文件操作、系统管理等。Python提供了多种方式来实现这一需求。
实现步骤
使用subprocess.run
在Python 3.5及以上版本,推荐使用subprocess.run
。它返回一个CompletedProcess
对象,示例代码如下:
1 |
|
使用os.system
os.system
可以直接执行系统命令,但它存在安全风险,示例代码如下:
1 |
|
使用os.popen
os.popen
会返回一个类文件对象,可用于访问进程的标准输入/输出,示例代码如下:
1 |
|
使用subprocess.Popen
subprocess.Popen
是os.popen
的替代方案,功能更强大但稍复杂,示例代码如下:
1 |
|
使用subprocess.call
subprocess.call
与Popen
类似,但它会等待命令执行完成并返回返回码,示例代码如下:
1 |
|
核心代码
subprocess.run
示例
1 |
|
os.system
示例
1 |
|
最佳实践
- 优先使用
subprocess.run
,因为它是Python 3.5及以上版本推荐的方法,安全且功能强大。 - 避免使用
os.system
,除非命令完全来自可信任的常量,因为它存在安全风险。 - 当需要与进程进行交互或控制时,使用
subprocess.Popen
。
常见问题
FileNotFoundError: [Errno 2] No such file or directory
这通常是因为在不使用shell=True
时,直接传递了命令字符串,应使用列表形式,如["ls", "-a"]
,或者设置shell=True
。
TypeError: [...] NoneType [...]
检查是否设置了capture_output=True
,否则result.stderr
和result.stdout
将为None
。
TypeError: a bytes-like object is required, not [...]
程序返回的结果通常是字节类型,如果想作为普通字符串处理,设置text=True
。
subprocess.CalledProcessError: Command ' [...] ' returned non-zero exit status 1
命令执行失败,可以禁用返回码检查或检查实际程序的有效性。
TypeError: __init__() got an unexpected keyword argument [...]
可能使用的Python版本低于3.7.0,建议更新到最新版本,或者参考其他替代解决方案。
Python中执行程序或调用系统命令的方法
https://119291.xyz/posts/2025-05-07.python-execute-system-commands/