相关疑难解决方法(0)

在Python中调用外部命令

如何在Python脚本中调用外部命令(就像我在Unix shell或Windows命令提示符下键入它一样)?

python shell terminal command subprocess

4553
推荐指数
57
解决办法
325万
查看次数

具有超时的异步子进程

我在Python 3中生成具有超时的异步子进程时遇到问题.

我想要实现的目标:我希望异步生成多个进程而不等待结果,但我还要确保每个生成的进程都会在给定的超时内结束.

我在这里发现了类似的问题:在Python中使用模块'subprocess'和超时以及异步后台进程?但他们没有解决我的问题.

我的代码看起来像这样.我有使用模块'subprocess'和超时建议的Command类:

class Command(object):
  def __init__(self, cmd):
    self.cmd = cmd
    self.process = None

  def run(self, timeout):
    def target():
      print('Thread started')
      args = shlex.split(self.cmd)
      self.process = subprocess.Popen(args, shell=True)
      self.process.communicate()
      print('Thread finished')

    thread = threading.Thread(target=target)
    thread.start()

    thread.join(timeout)
    if thread.is_alive():
      print('Terminating process')
      self.process.terminate()
      thread.join()
Run Code Online (Sandbox Code Playgroud)

然后当我想要产生子进程时:

for system in systems:
  for service in to_spawn_system_info:
    command_str = "cd {0} && python proc_ip.py {1} {2} 0 2>>{3}".format(home_dir,
        service, system, service_log_dir)
    command = Command(command_str)
    command.run(timeout=60)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,输出似乎等待每个命令生成并结束.我明白了

Thread …
Run Code Online (Sandbox Code Playgroud)

python subprocess asynchronous python-3.x

5
推荐指数
1
解决办法
6220
查看次数