【问题标题】:python subprocess with failed command return code 0带有失败命令返回代码 0 的 python 子进程
【发布时间】:2017-07-18 02:34:18
【问题描述】:

我在 windows cmd 和 ubuntu bash 中都执行了以下代码:

python -c "import xxx"

错误消息输出。当我跑步时:

echo $? / echo %errorlevel%

值为 1。

当我在 python 脚本中使用子进程执行相同的任务时,如下所示:

cmdlst = ['python', '-c', '“import xxx”‘]
proc = subprocess.Popen(cmdlst)
retcode = proc.wait()

重新编码为 0。 有什么问题,我怎样才能得到正确的命令返回码 在子进程中运行。

提前致谢。

【问题讨论】:

  • 嗯?您在此处使用的“智能引号”根本不是有效的语法。
  • (也就是说'“import xxx”‘'"import xxx"'是完全不同的东西,而前者——也就是问题中包含的——不会 以状态 0 退出)。

标签: python subprocess


【解决方案1】:

运行 shell 命令(如果我们不考虑使用“智能引号”,则相当于您给定的 subprocess.Popen() 调用)

'python' '-c' '"import xxx"'

无论是否存在名为 xxx 的模块,都会以状态 0 正确退出

这是因为"import xxx" 是一个字符串,对字符串求值不会引发异常。您会从 python -c '"hello world"' 或任何其他字符串中获得完全相同的行为。


如果你真的想尝试执行代码import xxx,那么你需要去掉多余的引号:

subprocess.Popen(['python', '-c', 'import xxx']).wait()

...将正确返回1(如果不存在xxx 模块)。

【讨论】:

  • 我明白了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2016-04-09
  • 2020-01-29
  • 2023-03-24
相关资源
最近更新 更多