当我尝试调用以下代码时,我遇到以下错误:"您必须在通过STDIN(管道)提供数据时指定格式。"
subprocess.call(["in2csv", "--format", "xls", a_file, ">", output_file], shell=True)
我不确定为什么会这样,因为我告诉它原始格式是什么。我查看了docs,它并不清楚--format和-f之间的区别。
更新:我已将其更改为使用argparse来简化this recommendation之后的参数传递。我也使用了here使用Popen,这显然比根据the docs使用shell = true标志更安全。
parser = argparse.ArgumentParser()
parser.add_argument('in2csv')
parser.add_argument('--format')
parser.add_argument('xls')
parser.add_argument(a_file)
parser.add_argument(">")
parser.add_argument(output_file)
args = parser.parse_args()
print args
subprocess.Popen(args)
答案 0 :(得分:3)
像你所看到的错误是shell被传入的字符串弄糊涂的症状,例如由于文件名中的空格。在Python中生成进程时,最好避免使用shell。
而不是添加">"和output_file
作为参数,尝试使用stdout关键字参数重定向输出,该参数接受将写入输出的文件。
假设:
a_file
是一个包含输入文件名称的字符串,output_file
是一个包含所需输出文件名称的字符串工作电话可能如下:
with open(output_file, 'wb') as of:
subprocess.check_call(["in2csv", "--format", "xls", a_file],
stdout=of)
这里没有必要使用argparse;它意味着处理进入你的程序的命令行,而不是从它出去。