如果__name__ ==“ __main__”返回语句

时间:2019-06-14 14:00:59

标签: python

首先,我了解如果 name ==“ main ”并且不应该包含对main()的调用,我不应该返回任何内容。

我想做的是通过一个文件从远处的文件路径调用python文件(导入文件/功能不是一种选择)

当前我正在使用它来调用我的文件

result = subprocess.getstatusoutput('python farAwayFile.py')

但是,我想从该文件中获得类似于...的结果

("success", "I am farAwayFile print statement")

在我的farAwayFile.py

def main():
    print('I am farAwayFile print statement')
    return "success"

if __name__ == "__main__":
    main()

如果在我的farAwayFile.py中,我更改了...

 if __name__ == "__main__":
    return main()

我得到了想要的结果,但是我在函数定义之外有一个return语句,该语句会干扰任何pylint。

所以我的问题是,如何从farAwayFile.py返回结果?

2 个答案:

答案 0 :(得分:1)

在UNIX shell中,返回值在0到255之间,因此您不能在最终的return语句中返回字符串(可以,但是不能使用返回值)。
使用subprocess.stout/stderr获得打印语句; subprocess.returncode获取返回码。

最好的方法是导入模块。

您还可以将farAwayFile的返回值写到文件中(使用pickle),然后在主程序中将其读回。

答案 1 :(得分:1)

  

我想做的是通过一个文件从远处的文件路径调用python文件(导入文件/功能不是一种选择)

我认为假设您不知道,而不是您

您已经知道文件的路径,因为您要将其作为子进程运行,那么为什么不将该路径添加到PATH? ;)

import sys
sys.path.append("/your/path/here")
from farAwayFile import main

IDE会抱怨他们不知道导入的模块(因为它没有显示在其依赖关系中;您可以对其进行修复,以便建议能够正确显示),如果他们检查了PEP8,您将收到有关导入的投诉,而不是位于文件顶部。但这会起作用。

这样一来,您就无需更改模块中的任何内容,也无需像注释中所建议的那样将任何内容写入磁盘。