Python-Executar um script por outro

DsgBraga

Membro
Olá, tenho estado a trabalhar num projeto que comecei por diversão. É um simulação de um Sistema Operativo, não faz nada de mais, na ultima versão, na versão Beta tinha contas de onde se podiam mudar os dados e tinha nem meia dúzia de aplicações.
Quando acabei a versão Beta decidi começar a fazer algo mais complexo, então comecei a usar banco de dados e permitir que se adicione aplicações, ou seja, como um OS permite, uma espécie de instalação de aplicações.

Então a minha ideia foi criar uma pasta com as aplicações que estão disponíveis para serem usadas, criar um dicionário onde as keys são os nome das aplicações e os values são o seu diretório, que depois passa as keys para uma função que cria um menu e onde cada app corresponde a um número (esta parte funciona perfeitamente). O meu problema foi quando precisei de iniciar estas aplicações.

Quem me puder dizer como se inicia um script dentro de outro, eu agradecia.

Se quiserem analisar o código está neste repositório -> https://github.com/Darguima/SOEEP
 
os.system('python python_Script.py')

e isto q precisas ?
Eu já tinha pensado nisso, mas imagina, se os scripts forem em Python 3.7 e, como acontece um muitas distribuições Linux, o o Python de padrão ser o 2.7 o script iria dar erro.
Mesmo escrevendo os.system("python3 nome_do_script.py") isso poderia usar outra versão do Python, como por exemplo no meu Ubuntu que usaria o Python 3.5.
Uma solução seria eu descobrir a versão que está a ser usada, há maneira de fazer isso?
 
Talvez isto te possa ajudar.
Obrigado, para já acho que isso está a ajudar muito ... estou usando
Código:
versao_python = str(version_info.major) + "." + str(version_info.minor)
os.system(f"python{versao_python} nome_do_script.py")

Mas ao fazer isto no windows reparei que ele não funciona como nas distribuições linux, ou seja ao usar:
Código:
os.system("python3.7 nome_do_script.py")

é me retornado que python3.7 não é um comando válido pois ele só aceita:

Código:
os.system("python nome_do_script.py")

Enquanto tentava resolver reparei que neste código:

Código:
programa = os.system(f"python3.7 nome_do_script.py")
print(programa)

Como a resposta é um erro é colocado na tela 1 com o print(programa)

Mas se eu colocar um código que não dê erro:

Código:
programa = os.system(f"python nome_do_script.py")
print(programa)

É colocado na tela 0;

Suponho que seja igual a C em que quando é retornado algo diferente de zero é porque algo deu errado, certo?

E ao atribuir o 0 ou o outro numero que simbolize um erro, da seguinte maneira maneira, o script imprime no ecrã a resposta em texto do terminal, não há maneira de não o deixar fazer isso:

Código:
resposta = os.system("python")

Peço desculpa pela resposta que é capaz de estar confusa, mas é o melhor que consigo explicar.
 
Última edição:
Estás correto, o que estás a obter é o return code da execução do comando, se quiseres capturar o output (stdout, stderr etc) tens que recorrer a outro método.

Por exemplo:

Código:
>>> import subprocess
>>> print(subprocess.check_output("python --version", shell = True))
Python 2.7.9

(Existem mais alternativas)
 
Back
Topo