我是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
我真的无法知道我在做什么错事。请帮我解决这个问题。
答案 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