我有一个脚本应该花费时间来执行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)。
答案 0 :(得分:0)
你需要逃避&lt;标志。 试着打电话:
python time.py python ratatosk.py \< input.txt
使用与&lt;不同的字符可能更好。这样可以更轻松地运行此命令
答案 1 :(得分:0)
<
字符对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的特殊字符出现,并最终作为系统参数传递给您的程序。