这是一个非常基本的问题,但我无法找到答案。现在我有类似的东西:
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
答案 0 :(得分:2)
您可以跳过第二次打开(out
),而是使用sys.stdout
来写入。
如果您希望能够同时使用这两种方式进行调用,argparse
可以通过add_argument
将type=
组合到一个打开并写入的文件中,以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