Выполнение вызова подпроцесса использует сгенерированное имя файла - PullRequest
2 голосов
/ 31 января 2012

Итак, у меня есть скрипт на 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 ]

6 голосов
/ 31 января 2012

Проблема заключается в

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

Прежде всего, вам не хватает пробелов (если вы хотите использовать строку) или запятых (если вы хотите использовать список, предпочтительный метод). Во-вторых, > - это перенаправление оболочки, поэтому вы должны выполнить эту строку в оболочке, например:

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

Но вы не должны этого делать . Вместо этого используйте собственный Python shutil.copyfile:

shutil.copyfile('xaa', fileName)
0 голосов
/ 31 января 2012

Вы должны рассмотреть вопрос об использовании посланника .

Пример

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

Edit: Основным преимуществом посланника является простота.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...