如何通过双击.py文件来判断脚本是否运行?

问题描述 投票:0回答:1

我正在研究一个需要至少一个命令行参数的Python 3X程序。

目前,我正在使用argparse库处理参数,该库通过显示帮助文本来处理不充分的参数,并终止程序。当从命令行运行程序时,这很有用。

但是,如果用户单击.py或.pyc文件本身,则用户无法读取帮助文本或输入参数 - 程序几乎立即运行并完成。我想通过双击文件来查找我的程序运行时间,以便在这种情况下运行交互式UI。

换句话说,如果点击程序,我希望以交互方式提供参数,但是如果程序在命令行上运行,则保持argparse的标准行为,即让用户一次性指定它们,例如, python myprogram.py argument1

为此,我需要知道程序是从命令行运行还是双击文件。我知道python确实有一个像这样的工具来检查模块是否被导入或作为脚本if __name__ == "__main__":运行。

最小例子:

#test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("inputpath", help="path to plaintext input file")
args = parser.parse_args()
print(args.inputpath)

如果用户没有输入适当的参数,则在命令行上运行会为我们提供良好的错误处理:

user@MyPC:path/to/file$ python test.py
usage: test.py [-h] inputpathtest.py: error: the following arguments are 
required: inputpath

但是,尝试双击文件只是运行它并立即退出。没有时间输入参数或读取错误消息。


可能的解决方案:

一种方法是使用可选的“交互式”参数,如果不存在,则会手动提示用户。默认为交互性将允许用户在双击运行脚本时输入输入。但是,它仍然允许命令行用户使用交互选项来关闭此行为。缺点是用户必须输入选项才能获得“正常”行为(即关闭交互性)。

我正在调查的另一种方式是,当通过doubleclick运行时,它会出现sys.argv = ["pathtofile", '', '', '', '', '', '', '', '']。这应该是一种独特的方式来判断脚本是通过doubleclick还是从终端运行。

这在Windows 10上至少适用于我:

if sys.argv[1:]==['']*8:
    print("Running from a doubleclick")
else:
    print("running from a terminal")

因此,只需插入命令行和交互式UI,而不是打印语句和瞧。

如果有人有更优雅的答案,我会保持开放。

python python-3.x
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.