使子进程调用使用生成的文件名

时间:2012-01-31 17:46:24

标签: python subprocess

所以我有一个python脚本,它根据时间生成一个文件名。然后我尝试cat一些数据到该文件名。但是,似乎我无法传递它或其他东西。

代码如下所示:

fileName = "parsedOn_"+strftime("%Y_%m_%d_%H%M%S", gmtime())+".csv"
subprocess.call(['cat' + 'xaa' + '>' + fileName])

这是我得到的错误:

Traceback (most recent call last):
File "parseCSV.py", line 96, in <module>
subprocess.call(['cat' + 'xaa' + '>' + finalFile1])
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 444, in call
return Popen(*popenargs, **kwargs).wait()
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 595, in __init__
errread, errwrite)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/subprocess.py", line 1106, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

任何想法,如果我正在尝试做什么是可以使用子进程?

2 个答案:

答案 0 :(得分:6)

问题在于

subprocess.call(['cat' + 'xaa' + '>' + fileName])

首先,你缺少空格(如果你想使用字符串)或逗号(如果你想使用列表,首选方法)。其次,>是shell重定向,因此您必须在shell中执行此行,如:

subprocess.call('cat xaa > ' + fileName, shell=True)

但你不应该这样做。相反,使用Python的原生shutil.copyfile

shutil.copyfile('xaa', fileName)

答案 1 :(得分:-1)

您应该考虑使用envoy

样品

In [1]: import envoy

In [2]: r = envoy.run("cat requirements.txt")

In [3]: r.std_out
Out[3]:   'Flask==0.8\ngit+git://github.com/kennethreitz/flask-cache.git\nJinja2==2.6\ngit+git://github.com/kennethreitz/werkze ug.git\ndistribute==0.6.24\ngunicorn==0.13.4\nredis==2.4.9\nvanity==1.1.1\nwsgiref==0.1.2\n'

In [4]: print r.std_out
Flask==0.8
git+git://github.com/kennethreitz/flask-cache.git
Jinja2==2.6
git+git://github.com/kennethreitz/werkzeug.git
distribute==0.6.24
gunicorn==0.13.4
redis==2.4.9
vanity==1.1.1
wsgiref==0.1.2

编辑:     特使的主要优点是简单。