Linux如何将日期命令的输出作为命令行参数传递给python程序

时间:2015-02-09 10:54:45

标签: python linux pipe command-line-arguments

我是Linux的新手。我有一个非常简单的Python脚本,它接受命令行参数并打印它们。现在我只想将date命令的输出作为输入传递给这个Python脚本并打印出来。 Python脚本看起来像这样。

import sys
print "command line arguments recieved are"
for i in range(0,len(sys.argv)) :
   print sys.argv[i]

在运行此程序时,为了将date命令的输出传递给脚本,我刚刚做了

date | python exmp.py

这是将一个命令的输出作为程序输入传递的正确方法吗? 我的程序没有从date命令获取输入。我得到的输出看起来像这样

command line arguments recieved are
exmp.py

我真的无法知道我在做什么错事。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

如果你想将date的输出传递给python,你可以管它(使用|),或者你可以将它作为命令行参数传递。

考虑以下python程序:

import sys

print "Command line input:"
print sys.argv;

print ""

print "Standard input:"
print sys.stdin.read()

您可以使用以下命令在命令行上调用此程序:

echo "hmm, this is text" | python test3.py "`date`"

当我运行程序时,我得到:

Command line input:
['test3.py', 'Mon  9 Feb 21:10:00 AEST 2015']

Standard input:
hmm, this is text

日期左侧的引号指定应运行date并且您不仅仅指文本date。日期周围的双引号强制date的输出为传递给python的单个命令行参数。尝试删除外部引号,内部引号和两者。

首先执行|符号左侧的命令,然后将结果作为标准输入传递给右侧的程序。而不是echo你可以使用:

date | python test3.py

如果您只想将日期发布到python中,请查看一些内置的python模块。

答案 1 :(得分:0)

你正在混合Unix shell的两个不同设施。

你所要求的就像

一样
python exmp.py $(date)

或者您可以更改脚本以阅读标准输入:

date | python -c 'import sys
for line in sys.stdin: print line'

表达式$(date)执行command substitution:括号中的命令运行,其输出替换括号表达式。

有一个名为xargs的工具用于混合两者:

date | xargs python exmp.py