Jump to content

Recommended Posts

Posted (edited)

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
Posted (edited)

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
Posted
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.

Posted

É 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.

Posted

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.

Posted

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 ?

Posted
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?

Posted

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.

Posted (edited)

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.