2013-07-29 2 views
0

Я использую Python 3. Я все еще участвую, но, допустим, промежуточный язык на других языках программирования. Я создаю простой графический интерфейс, который просто делает простые вещи на данный момент, но добавлю больше вещей, когда я иду. У меня есть успех. Тогда у меня возникла идея, что для запуска внешнего скрипта, хранящегося в папке моего скрипта, есть функция (или что-то, что она вызывается в Python). Так что я написал это ...python интерпретатор работает код завершения, когда я не хочу его

def runscript(scriptname): 
    from subprocess import call 
    call(['scripts/'+scriptname]) 

Тогда позже в своем коде, у меня есть это ...

sdb = Button(topbar, text="Shutdown", command= runscript("shutdown.sh"), font=("Helvetica", 20), width=18) 

shutdown.sh простой скрипт, который делает то, что вы могли бы ожидать, что она.

Теперь, когда я запускаю скрипт python с помощью python3 MyScript.py, машина мгновенно отключается! Я, очевидно, хочу, чтобы он закрывался, когда я нажимаю кнопку «Завершение». Из чтения я понимаю, что это связано с тем, что Python выполняет каждую строку по мере ее появления. Поэтому я не понимаю, почему в Интернете есть множество примеров для функций, которые остановят ваш компьютер, тогда как мой более общий скриптовый код не работает каким-либо полезным способом.

ответ

3

Когда вы пишете код runscript("shutdown.sh"), что он должен делать?

Очевидно, что он должен вызвать функцию runscript и передать ей аргумент "shutdown.sh".

Итак, когда вы пишете код command=runscript("shutdown.sh"), что он должен делать?

Вы видите эту проблему? Вы выполняете функцию runscript и передаете результат этой функции атрибуту command. Вместо этого атрибут command принимает ссылку на вызываемую функцию. Так как вы пытаетесь передать в явном аргумент, один из способов достижения этой цели является с лямбда:

sdb = Button(..., command=lambda script="shutdown.sh": runscript(script)) 

Некоторые люди предпочитают functools.partial над лямбда:

sdb = Button(..., command=functools.partial(runscript, "shutdown.sh")) 
Смежные вопросы