[英]Passing arguments/strings into already running process - Python 2.7
[英]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),有几种方法可以实现。 这里有一些:
可能最容易接近的方法是您提到的例如subprocess.popen()
提供的标准流(STDIN,STDOUT)。 但这需要通信过程之间的父子关系。 也许你可以走这条路。
如果要避免亲子关系,Python的另一种方法是Pyro ,我对此有很好的经验。 尽管性能有所下降,但它易于使用且运行良好。 这也是一种非常“基础架构式”的处理方式,必须对这两个过程进行编码才能使用它。
您可以使用某种消息传递库,使您可以在进程之间进行通信。 ZeroMQ是一个不错的选择,并且具有python绑定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.