окно cmd и выключение не работает - PullRequest
0 голосов
/ 24 ноября 2018

Привет всем, я программист на python Я создал программу с IDE spyder с python 3.7.0, когда я запустил эту программу, программа не выполнила нужного действия, то есть они не закрывают этот компьютер или не блокируют его и не 't open cmd, можете ли вы показать мне ошибку и, если возможно, исправить код, введя ниже

import os
import ctypes
command = "cmd"
print ("select from any commands")
print ('1.open CMD')
print ('2.shutdown pc')
print ('3.restart pc')
print ('4.lock pc')
choice = input()
if choice == 1:     #starts command prompt
    os.system(command);
if choice == 2:     #trigger shutdown
    os.system("shutdown -p");
if choice == 3:     #trigger restart
    os.system("shutdown -r");
if choice == 4:     #trigger lockscreem
    ctypes.windll.user32.LockWorkStation()

1 Ответ

0 голосов
/ 25 ноября 2018

[Python 3]: input ( [prompt] ) возвращает string .При сравнении строки с целым числом (например, "1" == 1), результат всегда будет False .

Чтобы решить вашу проблему, либо:

  • Преобразовать каждое из 4 значений (используемых в сравнениях) в строку, поместив ее значение в кавычки, например:

    if choice == "1":
    
  • Преобразуйте input в целое число, например:

    choice = int(input())
    

    , но вам придется заключить его в try / , кроме *Блок 1035 * (чтобы избежать сбоя программы, если пользователь не введет целое число)

Примечания (для улучшения кода):

  • При вызове функций всегда проверяют их возвращаемое значение (что может быть индикатором ошибки)
  • Поскольку 4 являются вариантами выбора, тогда они взаимоисключающие , что означаеттолько один (или ни один) будет выполнен.Как следствие, вы можете заменить каждое из последний 3 , если предложения, на elif , поэтому, если программа вошла в одну ветку,он не будет проверять тех, кто следует за ним
    • Вы также можете добавить заключительное предложение else , где вы можете сообщить пользователю, что ни один из вариантоввыполнено (введенное значение отличается от всех)
  • Вместо 5 print операторов (для меню) вы можете просто пропустить одинстрока (вам придется ее отформатировать) в input :

    choice = input("select from any commands:\n  1.open CMD\n  2.shutdown pc\n  3.restart pc\n  4.lock pc\n")
    
  • Для большей гибкости вы можете использовать модуль subprocess (вместо os.system) для выполнения внешних команд

  • ctypes - сложная тема, и, хотя в этом случае все в порядке, для более сложных (например, вызовфункция с параметрами) может работать не так, как ожидалось.Есть много примеров (на этом сайте и на других), показывающих, как справляться с такими случаями
  • Когда программа не работает должным образом, вы всегда можете отладить или, по крайней мере, распечататьзадействованные переменные, и, таким образом, увеличивают шансы самостоятельно разобраться в проблеме
...