【问题标题】:Python script stops running after running command using os.system()使用 os.system() 运行命令后 Python 脚本停止运行
【发布时间】:2021-04-15 06:19:28
【问题描述】:

我的 python 脚本在运行 os.system() 后冻结。代码如下所示;

command_line = 'java -jar "backup.jar" test'
os.system(command_line)
# python script freezes at this point. Cannot move on to execute code below

由于某种原因,我今天突然遇到这个问题。过去没有问题。没有错误信息。没有提示有什么问题。我更新了最新的 Windows 10 软件包。不知道是不是这个原因。

如果无法解决此问题,是否有替代 os.system() 的方法来运行命令以使 python 脚本不会冻结?

我在 anaconda 上使用 python 3.8。

【问题讨论】:

  • Python 在这里不会“冻结”,只是等待任何输入。但是,它确实会等待目标程序终止,然后再从os.system 返回。在任何情况下*.com/q/89228/2864740 涵盖了允许“异步”运行其他进程的不同方法。 YMMV,因为它们还需要等待 java 进程结束以保证执行完成。
  • 它没有冻结,它可能在后台执行。您等了多长时间?

标签: python python-3.x os.system


【解决方案1】:

如下更改命令,看看命令是否有问题。

command_line = 'java -jar "backup.jar" test > /tmp/test.log'

您可以验证 /tmp/test.log 以查看日志中的 java 命令是否有任何问题。 os.system 等待响应。具有返回状态(0 - 如果成功)的 subprocess.call() 方法也可以实现相同的目的。要在后台运行命令,您可以使用 subprocess.Popen() 方法。

【讨论】:

    【解决方案2】:

    我会回答我自己的问题。它基于我标记为正确答案的 rajendrau 的答案。它对我有用。

    我所做的是使用subprocess.Popen()。脚本不再“冻结”。

    subprocess.Popen(['java', '-jar', "backup.jar", 'test'])
    

    【讨论】: