在Python和Python或shell脚本之间传输变量

zz2j4svz  于 2023-08-07  发布在  Shell
关注(0)|答案(1)|浏览(114)

从一个主python脚本,这里是main.py,我想调用多个下标,它们要么是python脚本本身(这里是sub1.py,为简单起见),要么是bash/shell脚本(这里是sub2.sh,为简单起见;这些通过subprocess.Popen()调用)。下标需要来自main.py的几个变量;相反地,main.py可能需要在下标中设置变量。因此,需要在python-python(main.py <-->sub1.py)和python-shell(main.py <-->sub2.sh)之间传输变量。
我知道的一些方法:

  • main.py --> sub1.py:通过os.system()subprocess.Popen()main.py调用sub1.py,将变量作为脚本参数传递,从例如sub1.py中的sys.argv[1]
  • main.py --> sub1.py:将sub1.py导入main.py;来自main.py的变量必须设置为sub1.py命名空间,否则sub1.py无法识别;如果sub1.py中存在非函数/类代码(即“全局”脚本代码,是否也正确执行)?
  • main.py --> sub2.sh:通过os.system()subprocess.Popen()main.py调用sub2.sh,将变量作为脚本参数传递,从例如sub2.sh中的$1
  • 所有方向/脚本类型:将变量以任何格式存储在来自一个脚本的某个文件中(例如,.txt、.dat、.pickle(用于python-python传输)),从其他脚本中的文件读取变量
  • 所有方向/脚本类型:从一个脚本(在os.environ[]字典中)将变量存储为环境变量,在另一个脚本中根据需要从那里提取
    问题:在python和python之间或者python和shell脚本之间传输变量(共享信息)的 * 最方便 * 的方法是什么?

问题的背景:main.py是以前的shell脚本main.sh的Python翻译。在main.sh中,任何下标subX.sh(当时python脚本较少)都是通过source subX.sh调用的,这样来自main.shsubX.sh的变量总是被相应的其他脚本所知(因为source在同一个shell中运行下标)。
使用的python版本是2.7.18(兼容性原因;不允许我安装较新的解释器)。

nuypyhwy

nuypyhwy1#

您要查找的是sys库中的sys.argv。查看更多:https://docs.python.org/fr/3/library/sys.html#sys.argv
基本上,在main.py如果你调用函数python sub1.py arg1 arg2,在sub1.py中,你可以得到这些参数:

from sys import argv
arg1 = sys.argv[1]
arg2 = sys.argv[2]

字符串
注意,sys.argv[0]不是你的第一个参数!

相关问题