windows - subprocess.Popen 不运行程序
问题描述
我想从我的 Python 脚本启动一个命令行程序。我正在使用 Python 3.6 在 Windows 10 上工作。以下代码启动命令行,但不打印任何内容。(如果我在这个命令行窗口中打印'echo hi',它工作正常)。
import subprocess
p=subprocess.Popen(['cmd','echo','hi'])
如果我尝试
p=subprocess.check_call(['cmd','echo','hi'])
我明白了CalledProcessError: Command '['cmd', 'echo', 'hi']' returned non-zero exit status 3221225786.
如果我尝试p=subprocess.check_call(['echo','hi'])
,我会收到FileNotFoundError: [WinError 2] The system cannot find the file specified
消息。
怎么了?
解决方案
试试这样:
import subprocess
try:
subprocess.check_call(["call", "cmd", "/k", "echo Hello"], shell=True)
except subprocess.CalledProcessError:
print("Error")
意义:
call
- 在 python 可执行文件中调用 shell
cmd
- 打开命令行窗口
/k
- 运行命令然后返回cmd
提示符(基本上就是按住cmd
窗口
如果要在新 shell 中启动所有内容,请在 args 中替换call
为关键字。start
更多标志:cmd /?
在 cmd 提示符下运行。
注意:将方法或函数调用放在错误处理块(如try-except-finally
.
推荐阅读
- python - 如何访问python请求模块中的自定义字段?
- c# - 调整图表区域大小以适合图表
- google-apps-script - 谷歌脚本 JDBC 极光连接错误
- ruby-on-rails - ActiveStorage::IntegrityError 仅在 Bitbucket 管道中
- python - Tkinter 保存画布并加载
- javascript - 通过在javascript中循环向jason数组添加另一个字段
- flutter - Flutter 聊天列表更新重建效率
- ssl - 通过 dns 为 route53 颁发证书时,Certbot 无法找到 AWS 凭证
- laravel - Laravel 文件使用隐式 AWS 密钥和秘密上传到 S3 不起作用
- php - PHP - 有没有办法将上传的文件保存到 Web 目录中?