Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pythonfoo>;bar(输入文件、输出文件)_Python - Fatal编程技术网

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命令配合使用。感谢您的澄清:)这个“复制”让我想到了这一点。