我如何确定谁在调用我的 Python 脚本?
How can I determine who is calling my Python script?
我正在编写一个 Python 脚本,我希望它的行为取决于调用该脚本的人:
- 如果从批处理文件中调用它,我希望 Python 脚本将其输出写入日志文件。
- 如果从命令提示符手动调用它,我希望 Python 脚本将其输出写入屏幕。
我的批处理文件如下所示:
python py_script.py
有什么办法可以做到吗?我看过 os.environ.has_key()
但我不知道如何使用它。
只需将一个参数传递给您的脚本,告诉他在哪里写入...命令行参数在 sys.argv
中传递。 stdlib 中有几个包可以处理它们,但您可能不需要这里是脚本的唯一选项。
最简单的方法是(如评论中的 tobias_k 所述)仅在从脚本调用时通过管道传输到日志文件
REM This is your batch file
python py_script.py >> your_log_file.txt
Bruno 在另一个答案中提出的从 sys.argv
中拉出一个标志的建议当然是有效的,但您最终会做很多重复的代码。您的代码库将如下所示:
if LOGGING:
with open(PATH_TO_LOGFILE, 'a') as logf:
logf.write(some_txt)
else:
print(some_txt)
任何时候你有打印电话。或者你可以做一些令人难以置信的丑陋的东西,比如
if __name__ == "__main__":
if LOGGING:
old_stdout = sys.sdout
with open(PATH_TO_LOGFILE, 'a') as logf:
sys.stdout = logf
main()
sys.stdout = old_stdout
老实说,这既丑陋又骇人听闻(甚至可能行不通,我从未尝试过重新分配 sys.stdout
)。只需使用 shell 重定向。
我正在编写一个 Python 脚本,我希望它的行为取决于调用该脚本的人:
- 如果从批处理文件中调用它,我希望 Python 脚本将其输出写入日志文件。
- 如果从命令提示符手动调用它,我希望 Python 脚本将其输出写入屏幕。
我的批处理文件如下所示:
python py_script.py
有什么办法可以做到吗?我看过 os.environ.has_key()
但我不知道如何使用它。
只需将一个参数传递给您的脚本,告诉他在哪里写入...命令行参数在 sys.argv
中传递。 stdlib 中有几个包可以处理它们,但您可能不需要这里是脚本的唯一选项。
最简单的方法是(如评论中的 tobias_k 所述)仅在从脚本调用时通过管道传输到日志文件
REM This is your batch file
python py_script.py >> your_log_file.txt
Bruno 在另一个答案中提出的从 sys.argv
中拉出一个标志的建议当然是有效的,但您最终会做很多重复的代码。您的代码库将如下所示:
if LOGGING:
with open(PATH_TO_LOGFILE, 'a') as logf:
logf.write(some_txt)
else:
print(some_txt)
任何时候你有打印电话。或者你可以做一些令人难以置信的丑陋的东西,比如
if __name__ == "__main__":
if LOGGING:
old_stdout = sys.sdout
with open(PATH_TO_LOGFILE, 'a') as logf:
sys.stdout = logf
main()
sys.stdout = old_stdout
老实说,这既丑陋又骇人听闻(甚至可能行不通,我从未尝试过重新分配 sys.stdout
)。只需使用 shell 重定向。