簡體   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