Jump to content
Psycho_Mind

Menu opções linha comandos

Recommended Posts

Psycho_Mind

Boas

Tenho 3 scripts, cada um com a sua funcionalidade sem haver qualquer ligação entre eles, precisava agora de criar um menu do género:

---------------------------------

a. Script1

b. Script2

c. Script3

Insira a opção desejada:

---------------------------------

E automaticamente corria o script com a opção escolhida pelo utilizador. Não sei se é possivel de o fazer visto que ao escolher a opção o script ser corrido como se o estivesse a chamar na linha de comandos como é usual: python Script1.py ou mesmo uma forma simples para o fazer.

Através do os.system consegui aceder ao script e carregar o mesmo como pretendia.

Necessito agora é de abrir um ficheiro .pdf através de umas das opções do menu, mas para este não estou a conseguir.

Obrigado.

Edited by Psycho_Mind

Share this post


Link to post
Share on other sites
Psycho_Mind

Experimenta:

os.startfile("mydoc.pdf")

Dessa forma não consegui... mas entretanto experimentei com o os.system('/caminho/ficheiro.pdf') e já consegui.

Obrigado.

Como tenho de ter o programa protegido com palavra passe coloquei para o codigo deste menu o seguinte:

while True:
pw = raw_input("\nEnter the password: ")
if pw.encode('rot13') == 'avkba': #avkba 'connects' to name of encrypted password
    print("Password is correct")
    break
else:
    print("Password did not match, try again!")

Encripto a password com outro script que tenho, e funciona tudo bem, mas quando insiro a password na linha de comandos a mesma fica visivel, o que é uma falha problemática em termos de segurança. Há alguma forma de ocultar estes carateres ao serem inseridos na linha de comandos ?

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
Pedro C.
Dessa forma não consegui... mas entretanto experimentei com o os.system('/caminho/ficheiro.pdf') e já consegui.

É estranho. Penso que o os.system apenas abre um processo especifico ao invés que o startfile fica na mesmo. Em teoria deveriam ambos resultar, se bem que o startfile, pelo motivo que falei anteriormente, é um pouco mais "gracioso".

Há alguma forma de ocultar estes carateres ao serem inseridos na linha de comandos ?

Nunca usei mas em python, geralmente, há sempre alguma coisa feita sobre o assunto. Vê isto: http://docs.python.org/2/library/getpass.html#getpass.getpass

Foi feito especificamente para o tipo de problema que estás a tratar.

Share this post


Link to post
Share on other sites
Psycho_Mind

É estranho. Penso que o os.system apenas abre um processo especifico ao invés que o startfile fica na mesmo. Em teoria deveriam ambos resultar, se bem que o startfile, pelo motivo que falei anteriormente, é um pouco mais "gracioso".

Nunca usei mas em python, geralmente, há sempre alguma coisa feita sobre o assunto. Vê isto: http://docs.python.org/2/library/getpass.html#getpass.getpass

Foi feito especificamente para o tipo de problema que estás a tratar.

Depois ainda com tempo ver qual o problema relacionado com o startfile.

Vou assim ver do que referiste sobre a password. Obrigado.

Aproveitando, sabes se será preferivel utilizar o optparse para utilizar ao invés deste menu 'tradicional' que estou a implementar ? Ouvi falar sobre o mesmo, mas não sei será melhor e se será facil de implementar.

Share this post


Link to post
Share on other sites
Pedro C.

Nunca usei o optparse, mas pelo que vi é um automatismo para desenvolvimento rápido de software baseado na consola. Isto dá jeito quando tens muitos argumentos e pouco tempo para fazeres o interface.

Pessoalmente eu gosto de ter muito controlo sobre o interface dos softwares que faço principalmente se eu souber que os seus utilizadores nunca mexeram em python e podem precisar de mais informação ou opções que um módulo como o optparse permite (pelo menos facilmente).

A minha sugestão é que uses o teu próprio código "tradicional" e se quiseres melhorá-lo basta programares esses melhoramentos. Para a esmagadora maioria dos casos serve perfeitamente.

Share this post


Link to post
Share on other sites
Psycho_Mind

Nunca usei o optparse, mas pelo que vi é um automatismo para desenvolvimento rápido de software baseado na consola. Isto dá jeito quando tens muitos argumentos e pouco tempo para fazeres o interface.

Pessoalmente eu gosto de ter muito controlo sobre o interface dos softwares que faço principalmente se eu souber que os seus utilizadores nunca mexeram em python e podem precisar de mais informação ou opções que um módulo como o optparse permite (pelo menos facilmente).

A minha sugestão é que uses o teu próprio código "tradicional" e se quiseres melhorá-lo basta programares esses melhoramentos. Para a esmagadora maioria dos casos serve perfeitamente.

Mas o optparse permite ver informação adicional para os comandos a serem executados, mas não funciona tanto como menu 'tradicional' como o que estava a implementar, correto ? Tendo assim de carregar sempre separadamente cada um dos scripts ou estou enganado ?

Share this post


Link to post
Share on other sites
Pedro C.
Mas o optparse permite ver informação adicional para os comandos a serem executados, mas não funciona tanto como menu 'tradicional' como o que estava a implementar, correto ?

Tanto quanto sei sim, mas mais uma vez chamo a atenção que nunca usei esse módulo (aliás neste momento a biblioteca mais recente é o argparse, o opt foi descontinuado).

Tendo assim de carregar sempre separadamente cada um dos scripts ou estou enganado ?

Não faço ideia, mas se tivesse de apostar diria que existe a possibilidade de meter mais de um script no mesmo parser. Talvez até fazendo um parser de parsers. Então mas não podes juntar os teus scripts só num?

Share this post


Link to post
Share on other sites
Psycho_Mind

Neste caso como são coisas distintas convem ter os scripts separados, dai necessitar do menu, até porque depois cada um irá retornar dados que carregarei diretamente do menu para ser mais simples e a coisa sempre ter mais para mostrar :)

Obrigado pela ajuda, vou ver também o argparse.

Share this post


Link to post
Share on other sites
Psycho_Mind

Não tinha pensado na altura, mas apercebi-me agora que tendo password para o script menu, quando dentro dos scripts que chamo a partir do mesmo faço os.system("python menu.py") para poder dizer que não quero continuar a utilizar este script onde estou e retornar ao do menu, ele voltará a pedir para inserir a password, o que não dá muito jeito visto que o utilizador já teria introduzido ao iniciar, não faz sentido estar sempre a faze-lo.

Qual poderia ser a melhor forma para resolver isto? Ao invés de ter os.system("python menu.py") para o script não há forma de meter apenas para um função dentro de um script ?

Resolvido... afinal basta fazer:

from nome_script import nome_função

(...)

os.system(mome_função())

Edited by Psycho_Mind

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.