【问题标题】:Keep the subprocess program running and accepting new arguments保持子进程程序运行并接受新参数
【发布时间】:2023-04-09 17:49:02
【问题描述】:

每次我用 Python 的子进程打开它时,我的程序启动大约需要 4-5 秒:

command = ['./command', arg1] # my command to launch the program
p = subprocess.Popen(command, stdout=subprocess.PIPE, bufsize=-1) # launch the program (takes about 4 seconds) 
print(p.stdout.read()) # display output

我想避免每次都等待程序启动并保持运行并传递新的参数。有没有办法让命令保持运行并将新参数传递给输出?

我希望是这样的:

  p = launch_the_program()
  p.run(arg1)
  p.run(arg2)
  p.run(arg3)
  p.close()

我知道this 的问题与我的类似,但我认为那里的答案已经过时,因为它对我不起作用。

编辑:链接的答案是将 input 传递给程序而不是 arguments (这是我想要实现的)。是否有一种解决方法可以保持程序运行并接受新参数而无需重新启动?

【问题讨论】:

  • 当您尝试将接受的答案中所写的内容应用于您已链接的问题时,出现了什么问题?
  • 您要传递新的参数(如arg1)还是新的输入(如链接问题)?从本质上讲,参数只能在启动程序时传递。
  • @MisterMiyagi 我想传递参数。没有解决办法吗?
  • “我想传递参数。没有任何解决方法吗?”不,因为那没有意义。根据定义,参数是在启动时传入的东西。您不能将参数传递给正在运行的程序,就像正在运行的程序不能接收参数一样。请重新考虑您的要求,和/或阐明“./command”如何期待输入并做出响应。
  • 另外,4-5 秒足够长,您几乎肯定会等待在 main() 被调用之后发生的初始化,而不仅仅是常规链接和加载;因此,虽然可以预链接、预加载和分叉准备调用 main() 的实例,但该技术在这里不太可能对您有所帮助。

标签: python python-3.x shell command-line subprocess


【解决方案1】:

run 返回时,您运行的程序已经退出并且不再在内存中。 RAM 中没有可重复使用的预初始化副本(通过使用不同的参数重新调用其 main)。

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    相关资源
    最近更新 更多