Python 正在访问_main中的变量__

Python 正在访问_main中的变量__,python,python-3.x,Python,Python 3.x,我试图从一个python模块中访问一个变量,该模块作为脚本运行。变量在中定义,如果uuuu name\uuuuuu==“\uuuuu main\uuuuuu”: 我正在使用的代码如下所示: MyCode.py cmd = 'python OtherCode.py' os.system(cmd) # Run the other module as a python script OtherCode.py if __name__ == "__main__": var =

我试图从一个python模块中访问一个变量,该模块作为脚本运行。变量在
中定义,如果uuuu name\uuuuuu==“\uuuuu main\uuuuuu”

我正在使用的代码如下所示:

MyCode.py
cmd = 'python OtherCode.py'
os.system(cmd) # Run the other module as a python script

OtherCode.py
if __name__ == "__main__":
    var = 'This is the variable I want to access'

我想知道是否有办法在仍然以脚本形式运行OtherCode.py的情况下访问此变量。

当您使用
os.system
时,它会作为一个完全独立的进程运行指定的命令。您需要通过某种操作系统级通信机制传递变量:标准输出、套接字、共享内存等


但是,由于这两个脚本都是Python,因此只导入其他代码要容易得多。(请注意,您需要在包中设置
OtherCode.py
,以便Python知道它可以
import
ed)。

当您使用
os.system
时,它会作为一个完全独立的进程运行指定的命令。您需要通过某种操作系统级通信机制传递变量:标准输出、套接字、共享内存等

但是,由于这两个脚本都是Python,因此只导入其他代码要容易得多。(请注意,您需要在包内设置
OtherCode.py
,以便Python知道它可以
import
ed)。

您可以使用模块将模块作为
\uuuu main\uuuu
导入,然后从返回的字典中提取变量:

导入runpy
vars=runpy.run\u模块(“其他代码”,run\u name=“\uuuuuu main\uuuu”)
所需的_var=vars[“var”]#其中“var”是所需的变量名
您可以使用模块将模块作为
\uuuuu main\uuuuu
导入,然后从返回的字典中提取变量:

导入runpy
vars=runpy.run\u模块(“其他代码”,run\u name=“\uuuuuu main\uuuu”)
所需的_var=vars[“var”]#其中“var”是所需的变量名

而此修复程序可能并不理想(或者,如果用户在谷歌上搜索它,他们会寻找什么) 我最终打印出变量,然后使用子流程将标准输出作为变量:

MyCode.py
cmd = 'python OtherCode.py'   
cmdOutput =  subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout

OtherCode.py
if __name__ == "__main__":
    var = 'This is the variable I want to access'
    print(var)

在本例中,cmdOutput==var

,而此修复程序可能并不理想(或者,如果用户使用谷歌搜索它,则可能不理想) 我最终打印出变量,然后使用子流程将标准输出作为变量:

MyCode.py
cmd = 'python OtherCode.py'   
cmdOutput =  subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout

OtherCode.py
if __name__ == "__main__":
    var = 'This is the variable I want to access'
    print(var)

在本例中,cmdOutput==var

变量在
os.system(cmd)
返回时立即消失,因为它仅在该过程中定义。如果您只需要分配给变量的值,则需要研究进程间通信的各种方法,ad
OtherCode.py
必须修改才能配合。为什么不直接导入其他脚本呢?为什么必须通过
cmd
运行它?为什么这里的这些选项都不适合你@RandomDavis:好吧,如果变量定义受到如图所示的导入保护,那就不起作用了。只要
os.system(cmd)
返回,变量就会消失,因为它只是在那个过程中定义的。如果您只需要分配给变量的值,则需要研究进程间通信的各种方法,ad
OtherCode.py
必须修改才能配合。为什么不直接导入其他脚本呢?为什么必须通过
cmd
运行它?为什么这里的这些选项都不适合你@RandomDavis:好吧,如果变量定义受到如图所示的导入保护,那就不起作用了。如果你
导入其他代码
\uuuuuuu name\uuuu==“\uuuu main\uuuuuu”
为真?@wwii No,这是一个好的观点<代码>变量需要移动到模块作用域中。@0x5453我想你的意思是“无条件执行”,因为它已经在模块作用域中了。@chepner是的,你是对的。如果你导入其他代码将
\uu name\uuuu==“\uuuu main\uuuu”
是真的吗?@wwii不,这是一个好的观点
var
需要移动到模块作用域中。@0x5453我想您的意思是“无条件执行”,因为它已经在模块作用域中了。@chepner是的,您是正确的。