python - 无法将 Python 脚本作为子进程运行
问题描述
我正在尝试使用基本脚本将 MQTT 订阅者脚本作为子进程运行,但这会导致异常。该脚本本身运行良好,但是一旦我尝试将其转换为子进程或在线程中运行它,就会导致异常。我不能在单独的线程中运行 MQTT 脚本吗?或者我是否有一些我不知道的冲突,因为我是 Python 新手?
订阅脚本
def on_connect(client, userdata, flags, rc):
print("Connected with result code: " + str(rc))
print("Subscribing to topic: ", sub_topic)
client.subscribe(sub_topic, 2)
print("Listening...")
def on_message(client, userdata, msg):
print("Message Topic =", msg.topic)
print("Message Payload =", msg.payload.decode())
check_if_valid_value(json.loads(msg.payload.decode()))
def check_if_valid_value(unpackedjson):
if "accountid" in unpackedjson:
print("Attribute exists!")
if unpackedjson["accountid"] == accountId:
print("Account Id is correct")
global correct_message_count
def main():
client = mqtt.Client(client_id)
client.on_connect = on_connect
client.on_message = on_message
print("Connecting to broker...")
try:
client.connect(broker_address)
client.loop_forever()
except:
print("Interrupted Successfully")
pass
if __name__ == '__main__':
main()
基本脚本
def main():
runProvisionTest()
def runProvisionTest():
print("Starting Provision Test...")
try:
p = subprocess.Popen(DeviceProvisionSubscribeTest.main)
except:
print("Exception")
pass
if __name__ == '__main__':
main()
堆栈跟踪
Traceback (most recent call last):
File "c:\Users\christopher\Documents\Python Workspace\BaseTest.py", line 32, in <module>
main()
File "c:\Users\christopher\Documents\Python Workspace\BaseTest.py", line 11, in main
runProvisionTest()
File "c:\Users\christopher\Documents\Python Workspace\BaseTest.py", line 15, in runProvisionTest
p = subprocess.Popen(DeviceProvisionSubscribeTest.main)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2032.0_x64__qbz5n2kfra8p0\lib\subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2032.0_x64__qbz5n2kfra8p0\lib\subprocess.py", line 1360, in _execute_child
args = list2cmdline(args)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2032.0_x64__qbz5n2kfra8p0\lib\subprocess.py", line 565, in list2cmdline
for arg in map(os.fsdecode, seq):
TypeError: 'function' object is not iterable
解决方案
推荐阅读
- c# - UWP播放完最后一首歌曲后如何自动播放下一首歌曲
- php - PHP包含动态子域的路径
- android - 在 3D 应用程序中显示 WebView(WebGL 和视频)时的空视图
- c# - Xamarin 将图像绑定为 ListView 中的二进制数组。从可观察集合中删除条目时出现问题
- jwt - 带有 JWT 的身份服务器 4。不同端点上的不同到期日期
- c# - Unity 中 UI 的异步/等待样式
- javascript - 如何创建下拉列表以选择日期并显示链接到每一天的 iframe 标记
- php - 每当我在 aws 中部署新应用程序时,旧数据都会被删除
- r - 解析字符串 - 在末尾提取数字字符
- go - 如何从 Goroutine 中捕获错误?