Python参数削减为<从命令行读取时

时间:2013-08-28 15:01:58

标签: python command-line-arguments

我有一个脚本应该花费时间来执行python - 脚本。为简单起见,我只是在命令行中提供我想要作为参数执行的实际命令。

说我打电话:

python time.py python ratatosk.py < input.txt

此处python time.py之后的所有内容都是我想要执行的实际命令。

然而,在阅读sys.argv时:

print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)

它只返回:

Number of arguments: 3 arguments.
Argument List: ['time.py', 'python', 'ratatosk.py']

其他论点在哪里?它似乎<以某种方式剥夺了它。

我在MacBook Pro上运行Python Python 2.7.3(v2.7.3:70274d53c1dd,2012年4月9日,20:52:43)。

3 个答案:

答案 0 :(得分:0)

你需要逃避&lt;标志。 试着打电话:

python time.py python ratatosk.py \< input.txt

使用与&lt;不同的字符可能更好。这样可以更轻松地运行此命令

答案 1 :(得分:0)

您遇到shell redirection

<字符对shell有特殊含义。它将导致被调用的程序从后面的任何内容而不是默认的stdin(通常是键盘)中读取。

Python只关注来自stdin的阅读,无论它来自哪里。它不应该出现在sys.argv

在您的示例中,input.txt可能替代用户在您的程序中输入数据并且您的使用情况正确。

这是一个简短的例子:

<强> echo.py

text = raw_input()
print text

<强> input.txt中

hello from the file

示例运行

$ python echo.py 
hello from the keyboard
hello from the keyboard
$ python echo.py < input.txt
hello from the file

答案 2 :(得分:0)

说到UNIX Shell,符号'&lt;'被认为是重定向。这意味着标准输入将来自磁盘上的文件input.txt。

由于符号是特殊的,所以shell转换指定的命令,到达内核的是一个不包含'&lt;'的修改过的命令。

你可以逃避'&lt;'通过在它之前添加\来使它不会作为shell的特殊字符出现,并最终作为系统参数传递给您的程序。