首先,我是Python的新手。我也搜索了一个解决方案,但我想通常的方法(subprocess.popen)在我的情况下不起作用。
我必须在已经运行的python脚本中将参数传递给侦听器,而不必一遍又一遍地启动脚本。有一个例子如何将消息传递到液晶屏:
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])
我需要类似的东西,除了在backround中运行另一个脚本,因此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
现在我需要通过web应用程序传递所需的位置,该应用程序的设计方式与我上面描述的方式相同(例如,每次传递变量/参数时调用lua脚本)而不是通过控制台。
答案 0 :(得分:1)
您可以使用某种消息库来允许您在进程之间进行通信。 ZeroMQ是一个很好的选择,并且有python绑定。
答案 1 :(得分:1)
一旦进程运行,它就不会重新评估其命令行参数。您需要其他方式与之通信。这通俗地称为进程间通信(IPC),有几种方法可以实现它。以下是一些:
可能最平易近人的方式是标准流(STDIN,STDOUT),例如由你提到的subprocess.popen()
。但这需要在沟通过程之间建立父子关系。也许你可以走这条路。
Python的另一种方式,如果你想避免亲子关系,我已经获得了良好的经验是Pyro。它易于使用且运行良好,尽管有一些性能损失。它也是一个非常基础设施的基础设施。为此,两个过程都必须编码才能使用它。