静默打印导入的Python脚本

时间:2016-10-17 13:27:02

标签: python

我想将python脚本导入到另一个脚本中。

$ cat py1.py
test=("hi", "hello")

print test[0]

$ cat py2.py
from py1 import test

print test

如果我执行py2.py

$ python py2.py 
hi
('hi', 'hello')

我可以将第一个来自print的{​​{1}}静音吗?

我无法对from py1 import test中的print发表评论,因为它正在其他地方使用。

4 个答案:

答案 0 :(得分:5)

py1.py使用if __name__=="__main__":

所以就像你的py1.py看起来像:

def main():
    test=("hi", "hello")

    print test[0]

if __name__=="__main__":
    main()  

这将允许您仍然正常使用py1.py,但是当您导入它时,除​​非您调用它,否则它将不会运行main()函数。

This explains what's going on

答案 1 :(得分:4)

只需打开/ dev / null设备,并在需要安静时将sys.stdout变量覆盖到该值。

import os
import sys

old_stdout = sys.stdout
sys.stdout = open(os.devnull, "w")

from py1 import test

sys.stdout = old_stdout
print test

答案 2 :(得分:1)

您可能需要考虑将其他脚本更改为在其他位置运行时仍然打印#39; - 如果您将py1作为shell命令运行,请尝试确保所有"可执行语句"在一个文件中是在一个块内。

if __name__ == "__main__":
    print test

(见What does if __name__ == "__main__": do?

这样可以解决根本问题,而不会让你做出奇怪的事情(将标准重定向,然后将其重新放回等),或打开文件并在if块上逐行执行。

答案 3 :(得分:1)

您可以使用以下方法实现此功能:

py1.py

test=("hi", "hello")

def print_test():
    print(test)

def print_first_index():
    print(test[0])

py2.py

import py1
py1.print_test()

正如MooingRawr所指出的,这将要求您更改使用py1.py导入它的任何类,并调用py1.print_first_index()函数,这可能不符合您的喜好。