我有以下代码:
SCRIPT1
def encoder(input_file):
# a bunch of other code
# some more code
# path to output of above code
conv_output_file = os.path.join(input_file_gs, output_format)
subprocess.run(a terminal file conversion runs here)
if __name__ == "__main__":
encoder("path/to/file")
这就是我尝试导入以及如何在script2中设置它的方法。
SCRIPT2
from script1 import encoder
# some more code and imports
# more code
# Here is where I use the output_location variable to set the input_file variable in script 2
input_file = encoder.conv_output_file
我要做的是在另一个python3文件中使用变量output_location。因此,我可以告诉script2在哪里查找它正在尝试处理的文件而不对其进行硬编码。
每次运行脚本时我都会收到以下错误:
NameError: name 'conv_output_file' is not defined
答案 0 :(得分:-1)
我从你的描述中得到的是你想从另一个python文件中获取一个局部变量。
返回它或使其成为全局变量,并导入它。
也许您在正确导入时遇到了一些困难。
明确这两点:
.
以指定要导入的包。__init__.py
时,Python解释器才会将目录视为包。答案 1 :(得分:-1)
你真的想用变量conv_output_file做什么?如果你只想获得conv_output_file绑定的值/对象,那么最好使用return语句。或者如果你想访问变量并对该变量做更多的事情,即修改它,那么你可以使用global来访问变量conv_output_file。
def encoder(input_file):
# a bunch of other code
# some more code
# path to output of above code
global conv_output_file
conv_output_file = os.path.join(input_file_gs, output_format)
您只能在调用该函数firstscript.encoder(...)后才能从第二个脚本访问变量firstscript.conv_output_file,因为直到该函数未被调用变量才会出现。但是不建议使用全局,你应该避免使用全局。
我认为您希望获取该值而不是访问变量,因此最好使用return语句 def编码器(input_file): #一堆其他代码 #更多代码
# path to output of above code
return conv_output_file
conv_output_file = os.path.join(input_file_gs, output_format)
return conv_output_file
或只是
return os.path.join(input_file_gs, output_format)
答案 2 :(得分:-2)
我认为除了不返回变量或不将其声明为类变量之外,你可能会犯另一个错误。
告诉第二个脚本
您必须在第二个脚本中正确import
第一个脚本,并使用encoder
函数作为第一个脚本的属性。
例如,为您的第一个脚本encoder_script
命名。
在第二个脚本中,
import encoder_script
encoder_script.encode(filename)