Python использует zenity с var

Я пытаюсь запустить Zenity в скрипте Python, чтобы отобразить переменную.

nmaj = 10
cmd = ["zenity" "--question" "--text='Are you " + str(nmaj) + "years old ?'"]
subprocess.call(cmd, shell=True)

Могу ли я поместить строку в команду? Как? Спасибо


person Guillaume    schedule 04.04.2014    source источник
comment
Это должна быть одна длинная строка или список строк. Если первое, вам нужно использовать + для добавления каждой строки. Если последнее, вам нужно использовать , для разделения каждого элемента.   -  person Cory Kramer    schedule 04.04.2014


Ответы (2)


Вы можете попробовать использовать format и поместить '' вне "":

nmaj = 10
cmd = 'zenity --question --text="Are you {} years old ?"'.format(nmaj)
subprocess.call(cmd, shell=True)
person Saullo G. P. Castro    schedule 04.04.2014
comment
Как показывает @falsetru: нет необходимости использовать shell=True. Используйте {:d}, чтобы утверждать, что nmaj является целым числом. - person jfs; 05.04.2014

Вы пропускаете запятую (,) между аргументами командной строки:

cmd = ["zenity", "--question", "--text='Are you " + str(nmaj) + "years old ?'"]

В противном случае строковые литералы объединяются в строку (см. объединение строковых литералов< /а>):

>>> "zenity" "--question" "--text='Are you "
"zenity--question--text='Are you "
person falsetru    schedule 04.04.2014
comment
--text и его значение можно передать как отдельные аргументы: [..., "--text", "Are you {n:d} years old?".format(n=nmaj)] - person jfs; 05.04.2014