Восстановление жесткого диска после использования dd [duplicate]

subprocess.call() ожидает список, первый элемент которого явно является законной командой оболочки. Сравните это, например:

>>> subprocess.call(['echo hello'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 523, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
>>> subprocess.call(['echo', 'hello'])
hello
0

В вашем случае subprocess.call(["(cd "+ os.path.expanduser('~') + "/catkin_ws/src)"]) ожидает найти двоичный файл, который выглядит так (обратите внимание на обратную косую черту, обозначающую космический charater):

 cd\ /home/user/catkin_ws/src

That рассматривается как одно единственное имя, которое, как ожидается, будет жить где-то в вашей системе. То, что вы действительно хотели бы сделать, это:

 subprocess.call(["cd", os.path.expanduser('~') + "/catkin_ws/src"])

Обратите внимание, что я удалил круглые скобки вокруг запятой, так как нет причин использовать подселочку.

EDIT:

Но в комментариях уже упоминалось, что использование cd в этом случае избыточно. Ответ Флориана также правильно упоминает, что subprocess.call() не использует оболочку. Вы могли бы подойти к этому двумя способами. Во-первых, вы можете использовать subprocess.call("command string",shell=True)

. Другой способ - явно вызвать конкретную оболочку. Это особенно полезно, если вы хотите запустить скрипт, требующий конкретной оболочки. Таким образом, вы можете сделать:

subprocess.call(['bash' , os.path.expanduser('~')  + "/catkin_ws/src"  ) ] )
14
задан 11 January 2012 в 02:20

0 ответов

Другие вопросы по тегам:

Похожие вопросы: