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

2 投票
2 回答
982 浏览
提问于 2025-04-17 12:03

我有一个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)

撰写回答