Python文件间变量传递问题(Shell脚本场景)求助
问题原因与解决方案
首先明确:这和「值传递」没关系,问题出在Python的模块导入机制和进程隔离上。
为什么原来的方法不行?
- 你用
python3 script1.py和python3 script2.py启动了两个完全独立的Python进程,进程之间的内存是相互隔离的,第一个进程里的var1不会自动传到第二个进程。 - 当你在
script2.py里写from script1 import var1时,Python会重新执行整个script1.py文件,这时候sys.argv[1]读取的是当前运行script2.py时的命令行参数(也就是"2nd"),而不是之前运行script1.py时的参数。
适合初学者的三种解决方案
方案一:用文件传递变量
让script1.py把变量值写到文件里,script2.py从文件读取:
修改script1.py:
import sys var1 = sys.argv[1] # 将变量值写入文件 with open('var1.txt', 'w') as f: f.write(var1)
修改script2.py:
# 直接读取文件内容 with open('var1.txt', 'r') as f: var1 = f.read().strip() # strip()去掉换行符 print(var1) # 输出: 1st parameter
Shell脚本保持不变:
python3 script1.py "1st parameter" python3 script2.py "2nd"
方案二:用环境变量传递
通过Shell环境变量在进程间传递值:
修改shellcode.sh:
# 运行script1并捕获它的输出 VAR1=$(python3 script1.py "1st parameter") # 将VAR1作为环境变量传给script2 VAR1="$VAR1" python3 script2.py "2nd"
修改script1.py:
import sys var1 = sys.argv[1] # 将变量值打印到控制台(供Shell捕获) print(var1)
修改script2.py:
import os # 从环境变量中读取值 var1 = os.getenv('VAR1') print(var1) # 输出: 1st parameter
方案三:直接在Shell脚本中传递参数(最简单)
如果script2.py可以接受多个参数,直接把第一个参数传给它:
修改shellcode.sh:
# 把要传递的值存到Shell变量里 TARGET_PARAM="1st parameter" # 依次运行两个脚本,把TARGET_PARAM传给它们 python3 script1.py "$TARGET_PARAM" python3 script2.py "$TARGET_PARAM" "2nd"
修改script2.py:
import sys # 取第一个参数作为需要的var1,第二个参数是原来的"2nd" var1 = sys.argv[1] other_param = sys.argv[2] print(var1) # 输出: 1st parameter print(other_param) # 输出: 2nd
内容的提问来源于stack exchange,提问作者Rohan Hari
相关产品推荐
相关产品推荐

