我是python / programming的新手,我偶然发现了这个“问题”。
我想让我的主脚本多次运行一个单独的脚本,以这种方式获取我已经打开的所有进程,并有可能将其关闭。
我需要每次从我的主代码中指定一些变量,以便使这些进程分别运行,每个变量都有我在主文件上的终端指定的自己的“设置”。
你能指出我正确的方向吗?我需要阅读/搜索什么才能解决这些问题?
基本示例:
我的main.py文件将询问一个字符串,例如。 val = input("value: ")
。我输入“你好”。
我的process.py文件将循环运行,打印“ hello”,直到我说停止为止。
当第一个进程正在运行时,我可以在主程序中指定另一个字符串。 val =“ bye”,process.py将再次以字符串“ bye”开头,而不会使用“ hello”关闭该字符串。
直到我指定如此,它们都必须运行。
,我也想列出一个孩子。运行process.py并带有其“规格”,并有可能例如关闭它们。并为其分配一个ID。
我做错了吗?有更好的方法吗?我一点也不知道。
感谢您的帮助
答案 0 :(得分:0)
您可以使用不同的参数生成运行process.py
脚本的子流程。
这些子进程将独立于父进程继续运行,或者您可以从main.py
监视并杀死它们,看起来像这样。
import subprocess
import time
def spawn_process_py(arguments):
args = [
sys.executable, # use the same Python this script is using
'process.py', # the script to run
] + list(arguments)
return subprocess.Popen(args)
p1 = spawn_process_py(['hello'])
p2 = spawn_process_py(['ohai'])
time.sleep(5) # wait for a bit
p1.terminate() # kill process 1
time.sleep(5) # wait for a bit
p2.terminate() # kill process 2
您自然可以使用dict或数组来跟踪子流程,而不仅仅是将它们保留在p1
和p2
之类的自由变量中。
import sys
import time
while True:
print('Process.py:', sys.argv[1:])
time.sleep(.2)
其他方法例如multiprocessing
模块,它添加了进程间通信等,但这可以说是最简单的。