【问题标题】:How can I determine who is calling my Python script?如何确定谁在调用我的 Python 脚本?
【发布时间】:2015-10-13 09:57:42
【问题描述】:

我正在编写一个 Python 脚本,我希望它的行为取决于调用该脚本的人:

  • 如果从批处理文件中调用它,我希望 Python 脚本将其输出写入日志文件。
  • 如果从命令提示符手动调用它,我希望 Python 脚本将其输出写入屏幕。

我的批处理文件如下所示:

  python py_script.py

有什么办法可以做到这一点吗?我看过os.environ.has_key(),但我不知道如何使用它。

【问题讨论】:

  • 在批处理文件中调用脚本时,为什么不直接将输出通过管道传输到日志?
  • 或者做一个显式的参数来设置输出/日志

标签: python batch-file cmd subprocess parent


【解决方案1】:

只需将参数传递给您的脚本,告诉他在哪里编写...命令行参数在sys.argv 中传递。标准库中有几个包可以处理它们,但您可能不需要这里,这是您脚本的唯一选择。

【讨论】:

    【解决方案2】:

    执行此操作的最简单方法是(如 cmets 中的 tobias_k 注释)仅在从脚本调用时通过管道传输到日志文件

    REM This is your batch file
    python py_script.py >> your_log_file.txt
    

    布鲁诺在另一个答案中提出的从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 重定向。

    【讨论】:

    • 既然我已经看到了您的第一个提案(基于 Tobias_k 的评论),我无法想象当我问这个问题时我在想什么。我已经使用重定向到输出文件,它工作得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多