让子进程调用使用生成的文件名
我有一个Python脚本,它会根据时间生成一个文件名。然后我想把一些数据写入这个文件里。但是,似乎我无法把数据传进去,或者说有些问题。
下面是我的代码:
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
有没有人知道我想做的事情,使用subprocess是否可行?
2 个回答
-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
补充说明:envoy的主要优点是简单易用。
6
问题出在这里
subprocess.call(['cat' + 'xaa' + '>' + fileName])
首先,你缺少了空格(如果你想用字符串的话),或者缺少了逗号(如果你想用列表,这种方法更好)。其次,>
是一个命令行重定向符号,所以你必须在命令行中执行这一行,像这样:
subprocess.call('cat xaa > ' + fileName, shell=True)
但是你不应该这样做。相反,应该使用Python自带的shutil.copyfile
:
shutil.copyfile('xaa', fileName)