0

我得到了一个脚本,它应该花费执行脚本所需的时间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)。

4

3 回答 3

0

您需要转义 < 符号。尝试调用:

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

使用与 < 不同的字符可能会更好,这样运行此命令会更容易

于 2013-08-28T15:08:36.173 回答
0

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

由于符号是特殊的,shell 转换了指定的命令,到达内核的是一个不包含'<'的修改命令。

您可以通过在它之前添加 \ 来转义“<”,这样它就不会作为特殊字符出现在 shell 中,并最终作为系统参数传递给您的程序。

于 2013-08-28T15:12:58.910 回答
0

您遇到了shell 重定向

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

Python 只关心从 读取stdin,而不管它来自哪里。它不应该出现在sys.argv.

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

这是一个简短的例子:

回声.py

text = raw_input()
print text

输入.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
于 2013-08-28T15:10:36.663 回答