【问题标题】:Python return code for os.system() and subprocess.call() commandos.system() 和 subprocess.call() 命令的 Python 返回码
【发布时间】:2016-08-12 06:06:56
【问题描述】:

我在 windows 服务器上运行 python。

我想要 os.system 的返回码,以便我可以检查 robocopy 是否成功。

a=os.system('robocopy \\\\aucb-net-01\\d$ \\\\nasc01\\rem\\aucb-net-01 /E /MIR')

"a" 有任何价值吗?我可以打印吗?喜欢这个打印("a",a)

然后我可以决定 robocopy 是否成功。

另外,如何使用 subprocess.call() 命令在 robocopy 上运行?并获得返回码。

感谢大家阅读我的帖子。

【问题讨论】:

  • 你试过什么?请提供您尝试的示例代码。为什么需要 powershell?

标签: python windows robocopy


【解决方案1】:

使用 os.system

import os
cmd = os.system('robocopy \\\\aucb-net-01\\d$ \\\\nasc01\\rem\\aucb-net-01 /E /MIR')
exit_code = os.WEXITSTATUS(cmd)

使用子进程

import subprocess
exit_code = subprocess.call('robocopy \\\\aucb-net-01\\d$ \\\\nasc01\\rem\\aucb-net-01 /E /MIR', shell=True)

【讨论】:

  • 另外,我想在 windows 上运行的 python 脚本中发送电子邮件。
  • os.WEXITSTATUS 未在 Windows Python 中定义。 Windows 中的退出代码通常是 32 位值。如果它不是一般的成功 (0) 或失败 (1) 代码或自定义应用程序错误代码,那么它可能是 16 位 Windows 错误代码甚至是 32 位 HRESULTNTSTATUS 代码。后者通常仅在进程由于给定原因无法初始化时发生。
  • @user1602531 这是一个单独的问题。如果您遇到特定问题,请在 Stack Overflow 上提出另一个问题
  • @eryksun 有什么可以跨平台兼容的吗?
  • 如果你想在 Windows 上实现这个功能,你可以简单地使用success = lambda x: x == 0。请注意,子进程模块(即Popen._handle_exitstatus)中的非Windows退出状态处理首先检查os.WIFSIGNALED(sts)(信号状态在低8位中),它使用returncode = -os.WTERMSIG(sts),即通过a终止shell信号使退出代码为负。在 Unix 上使用os.system(至少在我在 Linux 上的测试中),当os.WIFSIGNALED 为真时,您还需要-os.WTERMSIG(sts) 才能获得与子进程相同的退出代码。
猜你喜欢
  • 1970-01-01
  • 2013-01-17
  • 2018-12-08
  • 2016-10-18
  • 2021-05-22
  • 2016-10-17
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多