如何直接从外壳运行python程序?


10

我写了一个剧本。当它启动时,它不会停止,并且不断从Internet获取数据。我可以这样称呼它:

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

但是我想从这样的终端直接在目的地内调用它:

internetScanner start

我该怎么办?


2
我不知道如果标题可以在这个..改变
user606723

@ user606723随时建议进行更改以进行更改。第一个标题是“如何让我的程序可以在Shell上运行?” 不是很好
slhck

Answers:


27

您可能应该将文件重命名main.pyinternetScanner。* nix上的扩展纯粹是可选的。在这里没关系。

mv main.py internetScanner

然后,将以下行添加到该文件的开头:

#!/usr/bin/env python3

这将确保在Shell执行文件时,它将知道python3用于解释内容。这就是所谓的社bang。现在,使文件可执行:

chmod +x internetScanner

现在,您可以从以下位置运行程序/User/Desktop/project/internetScanner/

./internetScanner start

您的程序将在前台运行并继续运行,直到您按Ctrl- 为止C。如果您不希望这样做,也可以在命令后面添加“&”号,从而在后台启动程序:

./internetScanner start &

这将使您的程序运行,但是您可以继续使用外壳程序。这就是所谓的作业控制,并有关于它的一个简单的教程在这里

如果现在希望能够在系统上的任何位置运行该程序,则需要将internetScanner目录添加到您的目录中PATH什么是PATH和其他环境变量,如何设置或使用它们?


好答案。我建议添加一下,如果他不想等待命令和/或将其输出和错误流重定向到文件,则他可能希望以&号结尾。
本·霍金

@BenHocking谢谢,我将其添加到了答案中。
slhck

X &不会将进程与控制shell分离,它只会使进程后台运行,这意味着,如果该shell退出,它将获得TERM信号发送给它;所以,如果你不想,你应该使用分离detach ./internetScanner start
Dan D.

1
@丹 ...或者nohupdisown或者at,等等。如何完全从终端分离流程?
slhck 2011年

可能值得注意的是,main.py只要它internetScanner与$ PATH中的某个符号链接,它仍然可以命名。
jdd 2012年

2

假设不需要其他文件/User/Desktop/project/internetScanner/,如果要为单个用户安装,请将(ln -s)链接main.py$HOME/bin/internetScanner。您可能$HOME/bin首先需要mkdir 。

下次登录时,$HOME/bin可能会添加到您的PATH中。如果您希望所有用户都可以使用它,请将其复制到/usr/local/bin

如果必须在中执行/User/Desktop/project/internetScanner/,请先导入os并调用

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

或在中启动脚本$HOME/bin/usr/local/bin更改后/User/Desktop/project/internetScanner/执行的脚本。


0

放入alias internetScanner "python /User/Desktop/project/internetScanner/main.py".aliases文件(用于csh)。对于bash,请alias internetScanner="python /User/Desktop/project/internetScanner/main.py"输入.bashrc。之后,您可以从任何地方使用internetScanner。


我从未听说过.aliases文件。这是Bash的标准吗?还是您必须在您的文件中显式地获取它.bashrc
哈扎克(Kazark)2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.