Python 将变量传递给另一个脚本
Python pass a variable to another script
我是 python 的新手,所以如果问题有点愚蠢或不切实际,我提前道歉。
我有一个内部开发的工具,可以借助一些我无法访问的自行开发的 python 软件包将 ECU 的轨迹转换为人类可读的数据。
我想将在此工具中获得的一些信号值(我可以将其存储在工具的 python 列表中)“导出”到外部 python 脚本,我可以在其中执行一些额外的操作加工。是这样的:
inTool.py
#do some trace processing, get signal_values as a result
def when_done():
start external python script and give it signal_values as input
external_Script.py
#import signal_values from inTool.py and do some additional processing.
这可行吗?
原因:该工具无法很好地处理第三方包,经常崩溃。这就是为什么类似于 this 的解决方案对我不起作用。
我最后的办法可能是将值写入工具中的文本文件,然后在我的脚本中再次读出它们,但我想知道是否有更好的方法来做到这一点。谢谢!
将数据从一个脚本传递到另一个脚本的常用方法是导入目标函数并调用它:
# inTool.py
from external_script import additional
def when_done():
signal_values = ... # list referenced by signal_values
additional(signal_values) # directly call function in external_script.py
写入中间文件没问题,很多工具都可以。您可以编写脚本来使用文件或从文件中读取 sys.stdin
。然后你有更多关于如何使用它的选择。
external_script.py
import sys
def process_this(fileobj):
for line in fileobj:
print('process', line.strip())
if __name__ == "__main__":
# you could use `optparse` to make source configurable but
# doing a canned implementation here
if len(sys.argv) == 2:
fp = open(sys.argv[1])
else:
fp = sys.stdin
process_this(fp)
程序可以写入文件或将数据通过管道传输到脚本。
import subprocess as subp
import sys
signal_values = ["a", "b", "c"]
proc = subp.Popen([sys.executable, "input.py"], stdin=subp.PIPE)
proc.stdin.write("\n".join(signal_values).encode("utf-8"))
proc.stdin.close()
proc.wait()
您可以通过 shell
管道
myscript.py | external_script.py
我知道这是一个老 post。我搜索了一段时间以获得可靠的答案,而 quamrana 的回答是最好的。我将添加一些内容来展示一个工作示例。
main.py
从 other_script 导入 run_this_test
def do_something():
var = "Hello World!"
run_this_test(var)
do_something()
other_script.py
def run_this_test(x):
print(x)
这是我第一次post在这里做这样的事情,我知道这是基本的,但这对我有用!
我是 python 的新手,所以如果问题有点愚蠢或不切实际,我提前道歉。
我有一个内部开发的工具,可以借助一些我无法访问的自行开发的 python 软件包将 ECU 的轨迹转换为人类可读的数据。
我想将在此工具中获得的一些信号值(我可以将其存储在工具的 python 列表中)“导出”到外部 python 脚本,我可以在其中执行一些额外的操作加工。是这样的: inTool.py
#do some trace processing, get signal_values as a result
def when_done():
start external python script and give it signal_values as input
external_Script.py
#import signal_values from inTool.py and do some additional processing.
这可行吗?
原因:该工具无法很好地处理第三方包,经常崩溃。这就是为什么类似于 this 的解决方案对我不起作用。
我最后的办法可能是将值写入工具中的文本文件,然后在我的脚本中再次读出它们,但我想知道是否有更好的方法来做到这一点。谢谢!
将数据从一个脚本传递到另一个脚本的常用方法是导入目标函数并调用它:
# inTool.py
from external_script import additional
def when_done():
signal_values = ... # list referenced by signal_values
additional(signal_values) # directly call function in external_script.py
写入中间文件没问题,很多工具都可以。您可以编写脚本来使用文件或从文件中读取 sys.stdin
。然后你有更多关于如何使用它的选择。
external_script.py
import sys
def process_this(fileobj):
for line in fileobj:
print('process', line.strip())
if __name__ == "__main__":
# you could use `optparse` to make source configurable but
# doing a canned implementation here
if len(sys.argv) == 2:
fp = open(sys.argv[1])
else:
fp = sys.stdin
process_this(fp)
程序可以写入文件或将数据通过管道传输到脚本。
import subprocess as subp
import sys
signal_values = ["a", "b", "c"]
proc = subp.Popen([sys.executable, "input.py"], stdin=subp.PIPE)
proc.stdin.write("\n".join(signal_values).encode("utf-8"))
proc.stdin.close()
proc.wait()
您可以通过 shell
管道myscript.py | external_script.py
我知道这是一个老 post。我搜索了一段时间以获得可靠的答案,而 quamrana 的回答是最好的。我将添加一些内容来展示一个工作示例。
main.py 从 other_script 导入 run_this_test
def do_something():
var = "Hello World!"
run_this_test(var)
do_something()
other_script.py
def run_this_test(x):
print(x)
这是我第一次post在这里做这样的事情,我知道这是基本的,但这对我有用!