繁体   English   中英

Python-将参数传递给已经运行的进程

[英]Python - Passing arguments to an already running process

首先,我是Python的新手。 我也搜索了一个解决方案,但我想通常的方法(subprocess.popen)在我的情况下不起作用。

我必须将参数传递给已经运行的python脚本中的侦听器,而不必一遍又一遍地启动脚本。 有一个示例如何将消息传递到LCD屏幕:

function printMsgText(message_text)
local f = io.popen("home/test/show_message.py '" .. message_text .. "'")
end

上面的lua脚本定义了每次收到消息时都会调用的过程。 调用的进程(show_message.py)如下所示:

import sys
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
sense.show_message(sys.argv[1])

我需要类似的东西,除了在后台运行另一个脚本之外,所以show_message.py不是最终过程,但需要将参数/消息传递给另一个已经运行的脚本。 我的想法是只让show_message.py将消息打印到控制台,并在主要过程中也使用sys.argv,但我有点害怕它会变得凌乱。

有没有简单的方法可以做到这一点? 亲切的问候

编辑:

主要脚本是控制步进电机。 根据用户输入,电动机将驱动预定义的步数。 脚本中等待用户输入的部分如下所示:

while wait:
            user_position = input("Where do you wanna go? (0, 1, 2, back): ")
            wait = False
            #  Console output
            print("Position: " + str(user_position))

            if user_position == "0":
                stepper.set_target_position(position_zero)
                wait = True
            elif user_position == "1":
                stepper.set_target_position(position_one
                wait = True
            elif user_position == "2":
                stepper.set_target_position(position_two)
                wait = True
            elif user_position == "back":
                break

现在,我需要通过网络应用程序传递所需的位置,该应用程序的设计方式如上所述(例如,每次传递变量/参数时调用lua脚本),而不是通过控制台。

进程运行后,将不会重新评估其命令行参数。 您需要其他方式与之通信。 俗称这是进程间通信 (IPC),有几种方法可以实现。 这里有一些:

  • 管道(在支持管道的平台上)
  • 共享内存
  • 套接字通讯
  • 讯息传递
  • RPC

可能最容易接近的方法是您提到的例如subprocess.popen()提供的标准流(STDIN,STDOUT)。 但这需要通信过程之间的父子关系。 也许你可以走这条路。

如果要避免亲子关系,Python的另一种方法是Pyro ,我对此有很好的经验。 尽管性能有所下降,但它易于使用且运行良好。 这也是一种非常“基础架构式”的处理方式,必须对这两个过程进行编码才能使用它。

您可以使用某种消息传递库,使您可以在进程之间进行通信。 ZeroMQ是一个不错的选择,并且具有python绑定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM