pythonfoo>;bar(输入文件、输出文件)
这可能是一个非常基本的问题,但我找不到任何答案。现在我有一些类似于:pythonfoo>;bar(输入文件、输出文件),python,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' 我可以用它运行 /modulename foo bar(工作)。如何更改它以使其与/.modul
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'
我可以用它运行
/modulename foo bar
(工作)。如何更改它以使其与/.modulename foo>条一起工作?(现在它给了我以下错误)
/pagereport.py today.log>sample.txt
回溯(最近一次呼叫最后一次):
文件“/pagereport.py”,第7行,在
outFile=sys.argv[2]
索引器:列表索引超出范围
您有什么错误
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)
我试图运行您的代码,但您没有导入sys,因此在按照上述方式修复之后。我可以用一个简单的cp
命令来运行它
python p4.py p4.py p4.py-bk
您可以跳过第二次打开(out
),而是使用sys.stdout
进行写入
如果您希望能够同时使用这两种调用方式,argparse
可以通过将type=
组合到一个打开的文件中,并将sys.stdout
设为默认值,从而轻松地使用add\u argument
./modulname foo > bar
由shell执行操作,并将标准输出流(fd1)复制到文件栏
。这是在命令运行之前发生的,因此不,您不能像那样传递命令,并且在Python脚本中有可用的bar
如果您坚持使用
,穷人的解决方案是将参数设置为单个字符串,并在其中执行一些字符串处理,例如:
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'
在脚本中:
infile, outfile = map(lambda x: x.strip(), sys.argv[1].split('>'))
假设没有文件名包含空格,则采取特殊处理,如在这种情况下传递两个参数
另外,看看argparse
模块,了解更灵活的参数解析功能。我想我需要学习bash。我误解了我任务的要求。它应该使用“foo>bar”命令,我认为我需要将数据直接写入应用程序中的第二个文件。现在我只是将它打印出来,而不是写入文件,这样它就可以很好地与这个“>”shell命令配合使用。感谢您的澄清:)这个“复制”让我想到了这一点。