我有main.py
和newcanmonitor.py
,我想用vcan0
选项导入newcanmonitor.py
,因为当我单独使用newcanmonitor.py
时,我在终端中输入python newcanmonitor.py vcan0
main.py
import newcanmonitor ??? <-- is there any way to use an option 'vcan0' here?
newcanmonitor.py
def read_bus(bus_device):
"""Read data from `bus_device` until the next newline character."""
message = bus.recv(0.2)
while True:
if message:
break
message = bus.recv(0.2)
try:
string = "{}:ID={}:LEN={}".format("RX", message.arbitration_id, message.dlc)
for x in range(message.dlc):
string += ":{:02x}".format(message.data[x])
except Exception as e:
print(e)
return string
提前感谢大家
您可以在导入模块之前尝试使用sys.argv.append("vcan0")
。
import sys
sys.argv.append("vcan0")
import newcanmonitor
但我不知道是否会与模块工作,因为模块将导入sys
,它可以获得新的sys.argv
没有"vcan0"
但是我宁愿使用if __name__ == "__main__"
在直接执行和导入时以不同的方式运行代码。
这样,独立版本可以从sys.argv
获取值并发送给函数-read_bus(sys.argv)
-main.py
可以导入函数并直接运行read_bus("vcan0")
newcanmonitor.py
def read_bus(bus_device):
"""Read data from `bus_device` until the next newline character."""
message = bus.recv(0.2)
while True:
if message:
break
message = bus.recv(0.2)
try:
string = "{}:ID={}:LEN={}".format("RX", message.arbitration_id, message.dlc)
for x in range(message.dlc):
string += ":{:02x}".format(message.data[x])
except Exception as e:
print(e)
return string
if __name__ == "__main__":
import sys
read_bus(sys.argv[1])
main.py
import newcanmonitor
newcanmonitor.read_bus("vcan0")