Como posso executar meu programa python diretamente do shell?

10

Eu escrevi um roteiro Quando é iniciado, ele não para e continua recebendo dados da Internet. Eu posso chamar assim:

cd /User/Desktop/project/internetScanner/
python3 main.py start

Mas eu gostaria de chamá-lo diretamente do terminal assim, dentro do destino:

internetScanner start

Como posso fazer isso?

Ted Wong
fonte
2
Gostaria de saber se o título poderia ser alterado neste ..
user606723
@ user606723 Sinta-se livre para sugerir uma edição para que ela seja alterada. O primeiro título "Como deixar meu programa executar no shell?" não foi muito bom.
slhck

Respostas:

27

Você provavelmente deve renomear seu arquivo main.pypara internetScanner. As extensões no * nix são puramente opcionais. Não deveria importar aqui.

mv main.py internetScanner

Em seguida, adicione a seguinte linha neste arquivo, logo no início:

#!/usr/bin/env python3

Isso garantirá que, quando o shell executar o arquivo, ele saberá usá-lo python3para interpretar o conteúdo. Isso é conhecido como Shebang . Agora, torne o arquivo executável:

chmod +x internetScanner

Agora você pode executar seu programa a partir de /User/Desktop/project/internetScanner/:

./internetScanner start

Seu programa será executado em primeiro plano e continuará sendo executado até você pressionar Ctrl- C. Se você não quiser isso, também poderá iniciar o programa em segundo plano, adicionando um e comercial após o comando:

./internetScanner start &

Isso permitirá que seu programa seja executado, mas você pode continuar usando seu shell. Isso se chama controle de trabalho, e há um tutorial simples sobre isso aqui .

Se você deseja agora executar o programa de qualquer lugar do sistema, é necessário adicionar o internetScannerdiretório ao seu PATH: O que são PATH e outras variáveis ​​de ambiente e como posso configurá-las ou usá-las?

slhck
fonte
Boa resposta. Eu recomendo adicionar que ele pode finalizar o comando com um e comercial (&) se ele não quiser esperar por ele e / ou redirecionar sua saída e fluxo de erro para um arquivo.
Ben Hocking
@ BenHocking Obrigado, adicionei-o à resposta.
slhck
X &não desanexa o processo do shell de controle, apenas o coloca em segundo plano, o que significa que, se o shell sair, ele receberá o sinal TERM; por isso, se você não quer que você deve usar desanexar , detach ./internetScanner start.
Dan D.
11
@DanD. ... ou nohup, disownou at, et cetera. Como desanexar um processo completamente do Terminal?
slhck 31/12
Pode ser interessante notar que ele ainda pode ser nomeado main.py, desde que esteja vinculado a internetScanneralgum lugar em $ PATH.
JDD
2

Supondo que nenhum outro arquivo /User/Desktop/project/internetScanner/seja necessário, se você deseja instalar para um único usuário, vincule ( ln -s) main.pypara $HOME/bin/internetScanner. Você provavelmente precisará mkdir $HOME/binprimeiro.

Da próxima vez que você fizer login, $HOME/binprovavelmente será adicionado ao seu PATH. Se você deseja disponibilizá-lo para todos os usuários, copie-o para /usr/local/bin.

Se precisar executar /User/Desktop/project/internetScanner/, inicie importando ose chamando

os.chdir('/User/Desktop/project/internetScanner/') 

ou crie um script do iniciador $HOME/binou /usr/local/binque seja alterado /User/Desktop/project/internetScanner/e execute o script.

Perkins
fonte
0

Coloque alias internetScanner "python /User/Desktop/project/internetScanner/main.py"no arquivo .aliases (para csh). Para o bash, insira alias internetScanner="python /User/Desktop/project/internetScanner/main.py".bashrc. Depois disso, você pode usar o internetScanner start de qualquer lugar.

Excalibur
fonte
Eu nunca ouvi falar de um .aliasesarquivo. Isso é algo padrão para o Bash? ou você precisa explicitamente fornecê-lo no seu .bashrc?
Kazark