如何获得在终端中输入的用于运行python文件的命令行?

时间:2018-08-24 17:55:53

标签: python command-line

假设我有一个python文件main.py,它具有一些可选参数,例如–learning-rate,-batch-size等。

如果要运行此文件,可以将以下内容输入到终端(例如,Ubuntu Linux)中。

python3 main.py --learning-rate 0.1 --batch-size 100

现在,我想在main.py中编写一些代码,以便在我输入上述命令后,可以通过执行这些代码以字符串的形式获取此命令。以下是我要获取的字符串:

“ python3 main.py-学习率0.1-批量大小100”

我要这样做的原因是我想将此字符串写入到我的记录文件中,以便我可以更好地了解自己运行了什么命令。

任何人都可以告诉我我应该导入哪个软件包以及我应该编写什么代码来在运行python文件时获取该命令信息吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

为什么不仅仅使用您解析的参数来重新制作命令?它可能与您键入的内容不完全相同,但可能会很好,因为它采用的是通用格式。

Ex(假设学习率和批量大小存储在类似命名的变量中):

command = "python3 main.py --learning-rate {} --batch-size {}".format(learning_rate, batch_size) 

如果某些命令是可选的,当然会有些复杂,但是我认为在这种情况下,这些参数会有一个默认值,因为您的网络每次都需要这些参数。

答案 1 :(得分:0)

您无法始终获得准确的键入内容,因为在启动脚本之前,shell将首先完成替换和扩展的文件名。例如,如果您键入python "foo.py" *.txt,则脚本将看不到*.txt,它将看到文件列表,并且不会看到foo.py周围的引号。

在避免这种警告的情况下,sys模块具有一个名为argv的变量,其中包含所有参数。 argv[0]是脚本的名称。

要获取python可执行文件的名称,可以使用sys.executable

要将它们绑在一起,可以执行以下操作:

print(sys.executable + " " + " ".join(sys.argv))