2016-08-01 60 views
1

我试图在后台运行一个Python脚本运行它发送命令,行书,听命令。例如,如果我跑我的脚本:用标志

python my_script.py将开始运行(并等待命令)。

然后我想运行:

python my_script.py --do_something,打开一个不同的Python程序,它会在之前的过程中运行的功能do_something()

我已经看到了这个作品像PDPlayer方案,其中--play使播放器的标志,开始播放视频。这也可以在python中完成吗?

我知道如何使用argparse处理命令行参数。我需要关于两个python进程之间的通信方面的帮助。

此外,我计划cx_freeze应用程序,所以应用程序的PID可以使用psutil通过搜索可执行文件的名称找到。

谢谢。

顺便说一句,我使用的是Windows ...

+0

这是依赖于操作系统的。在POSIX机器上,您可以将其作为响应信号的守护进程运行。在Windows上它将是一个服务等 –

回答

1

它可以,如果你保存原始脚本来完成某个地方的PID。 当你用一些标志运行你的脚本时,你发送的信号应该由主脚本正确处理。 在这里开始您的搜索https://docs.python.org/2/library/signal.html

+0

谢谢我认为这就是我的意思。 btw,说我cx_freezed python应用程序,它现在是一个可执行文件。我可以通过其进程名称检索pid吗? – Omer

+1

我从来没有真正使用Windows,所以我不能确定。 在linux中,你可以通过简单地运行'ps'来完成。您可以在启动原始脚本时在某个文件中编写pid,并在使用参数运行脚本时读取它,这是肯定的 –

1

这需要做两件事:您需要处理命令行标志,并且需要将信号发送到另一个进程。对于标志,你可以使用argparse库,或者简单地使用sys.argv。

用于发送信号,则需要在已经运行的进程的进程ID(PID)。在Linux下,您可以调用ps,并检查是否有另一个脚本实例正在运行。如果有,请发送一个信号。

另一种替代的信号处理是的DBus。虽然这不是跨平台的。