我如何确定谁在调用我的 Python 脚本?

How can I determine who is calling my Python script?

我正在编写一个 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 重定向。