Впервые я прошу немного помощи здесь, потому что я больше человек ServerFault.
Я делаю некоторые скрипты на Python и до сих пор люблю этот язык, но у меня есть небольшая проблема, которая не позволяет моему скрипту работать.
Вот строка кода, о которой идет речь:
subprocess.call('xen-create-image --hostname '+nom+' --memory '+memory+' --partitions=/root/scripts/part.tmp --ip '+ip+' --netmask '+netmask+' --gateway '+gateway+' --passwd',shell=True)
Я пробовал то же самое с os.popen. Все переменные установлены правильно.
Когда я выполняю соответствующую команду в своей обычной оболочке Linux, она прекрасно работает, но когда я выполняю ее, используя мои скрипты Python, я получаю странные ошибки. Я даже заменил subprocess.call () на функцию print, чтобы убедиться, что я использую точный вывод команды.
Я посмотрел на переменные окружения моей оболочки, но они почти одинаковы ... Я опубликую ошибку, которую я получаю, но не уверен, что она имеет отношение к моей проблеме.
Использование неинициализированных значений $ lines [0] в подстановке (s ///) в строке /usr/share/perl5/Config/IniFiles.pm 614.
Использование неинициализированного значения $ _ в сопоставлении с образцом (m //) в строке /usr/share/perl5/Config/IniFiles.pm 628.
Я не эксперт по Python, поэтому я, скорее всего, что-то здесь упускаю.
Заранее благодарю за помощь,
Antoine
EDIT
Следуя совету miax, я перестал использовать shell = True. Вместо этого я взглянул на документацию по Python для подпроцесса и использовал следующий фрагмент кода:
cmd = 'xen-create-image --hostname '+nom+' --memory '+memory+' --partitions=/root/scripts/part.tmp --ip '+ip+' --netmask '+netmask+' --gateway '+gateway+' --passwd'
args = shlex.split(cmd)
subprocess.call(args)
К сожалению, это ничего не меняет ...
EDIT2
Я использовал подсказку от miax, но я все еще получаю вышеуказанную ошибку ... Вот код, который я использовал.
cmd = ['xen-create-image', '--hostname', nom, '--memory', memory, '--partitions=/root/scripts/part.tmp', '--ip', ip, '--netmask', netmask, '--gateway', gateway, '--passwd']
subprocess.call(cmd)
Это действительно странно ... Точная команда отлично работает, когда я запускаю ее в обычной оболочке ...