Python foo>栏(输入文件,输出文件)

时间:2018-02-05 10:08:29

标签: python

这是一个非常基本的问题,但我无法找到答案。现在我有类似的东西:

import sys
inFile = sys.argv[1]
outFile = sys.argv[2]
with open(inFile, 'r+') as input,open(outFile,'w+') as out:
            #dosomething

我可以用它来运行它 ./modulname foo bar(工作)。如何更改它以便它可以与/.modulname foo > bar一起使用? (现在它给了我以下错误)。

./pagereport.py today.log > sample.txt
Traceback (most recent call last):
  File "./pagereport.py", line 7, in <module>
    outFile = sys.argv[2]
IndexError: list index out of range

3 个答案:

答案 0 :(得分:2)

您可以跳过第二次打开(out),而是使用sys.stdout来写入。

如果您希望能够同时使用这两种方式进行调用,argparse可以通过add_argumenttype=组合到一个打开并写入的文件中,以sys.stdout方式做到这一点。 h.request('POST', uri, body,headers={}) 是默认值。

答案 1 :(得分:1)

当你这样做时:

./modulname foo > bar
shell对{p> >执行操作,并将STDOUT流(FD 1)复制到文件bar。这在命令运行之前发生,所以不,你不能传递这样的命令,并且在Python脚本中有bar

如果你坚持使用>,那么穷人的解决方案就是将参数设为单个字符串,然后在内部进行一些字符串处理,例如:

./modulname 'foo >bar'

在你的剧本里面:

infile, outfile = map(lambda x: x.strip(), sys.argv[1].split('>'))

假设没有文件名有空格,请采取特殊处理,例如在这种情况下传递两个参数。

另外,请查看argparse模块以获得更灵活的参数解析功能。

答案 2 :(得分:0)

你有什么错误?

import sys
inFile = sys.argv[1]
outFile = sys.argv[2]
with open(inFile, 'r+') as in_put ,open(outFile,'w+') as out:
    buff = in_put.read()
    out.write(buff)

我尝试运行代码,但您没有import sys,所以在修复之后如上所述。我可以将它作为简单的cp命令运行。

python p4.py p4.py p4.py-bk