所以我有一个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
任何想法,如果我正在尝试做什么是可以使用子进程?
答案 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
编辑: 特使的主要优点是简单。