在Linux系统中运行Python文件是开发者和运维人员的基本技能之一,Python作为一种解释型语言,其执行依赖于Python解释器,而Linux作为主流服务器和开发环境,提供了多种灵活的方式来运行Python脚本,本文将详细介绍Linux环境下运行Python文件的多种方法、注意事项及进阶技巧,帮助读者全面掌握这一操作。
基础运行方法:直接通过Python解释器执行
最直接的方式是使用Python解释器命令来执行.py文件,Linux系统通常预装Python,但可能存在Python 2和Python 3共存的场景,因此需要明确调用对应的解释器版本。
使用python
命令(默认Python 2或Python 3)
在大多数Linux发行版中,python
命令默认指向Python 2(如CentOS 7)或Python 3(如Ubuntu 20.04+),若系统默认为Python 2,而脚本需Python 3执行,需使用python3
命令。
示例:
假设有一个名为hello.py
的脚本,内容如下:
print("Hello, Linux!") name = input("Please enter your name: ") print(f"Welcome, {name}!")
在终端中进入脚本所在目录,执行:
python3 hello.py
若脚本无需用户输入,会直接输出Hello, Linux!
;若包含input()
,则会等待用户输入后继续执行。
通过绝对路径执行解释器
如果系统中Python解释器未添加到环境变量$PATH
,或需指定特定版本的Python(如/usr/bin/python3.8
),可通过绝对路径调用。
示例:
/usr/bin/python3 hello.py
设置脚本执行权限:直接运行.py文件
Python脚本本质上是一文本文档,需通过解释器执行,但可通过设置可执行权限,使其像普通可执行文件一样直接运行(无需输入python
前缀)。
添加可执行权限
使用chmod +x
命令为脚本添加可执行权限:
chmod +x hello.py
执行后,脚本文件权限会变为rwxr-xr-x
(所有者可读写执行,组用户和其他用户可读执行)。
直接运行脚本
添加权限后,可通过以下两种方式运行:
- 相对路径:在脚本所在目录执行
./hello.py
(表示当前目录,Linux默认不将当前目录加入$PATH
,需明确指定)。 - 绝对路径:在任何目录执行
/path/to/hello.py
(如/home/user/scripts/hello.py
)。
注意事项:
直接运行脚本时,系统需通过脚本首行的“shebang”()确定解释器,需在脚本第一行添加正确的shebang行。
#!/usr/bin/env python3 print("This script uses shebang to specify Python interpreter.")
#!/usr/bin/env python3
:通过env
命令查找系统$PATH
中的python3
,兼容不同系统的Python安装路径(推荐)。#!/usr/bin/python3
:直接指定Python 3的绝对路径,若系统未安装在此路径会报错。
Python版本管理:处理多版本共存问题
Linux系统中可能同时安装Python 2和Python 3,或多个Python 3版本(如3.8、3.9),需确保脚本由正确的Python版本执行,避免因版本不兼容导致错误。
检查Python版本
使用以下命令查看当前系统安装的Python版本:
python --version # 默认Python版本(可能是Python 2) python3 --version # Python 3版本 python3.8 --version # 特定Python 3版本(如3.8)
使用alias
简化命令
若需频繁使用特定Python版本,可通过alias
设置命令别名,将python3.9
设为默认python
:
alias python=python3.9
注意:alias
仅对当前终端会话有效,若需永久生效,需将其添加到~/.bashrc
或~/.zshrc
配置文件中,并执行source ~/.bashrc
生效。
使用虚拟环境隔离依赖
不同项目可能依赖不同的Python包版本,直接使用系统Python可能导致冲突,虚拟环境(如venv
或virtualenv
)可创建独立的Python环境,隔离项目依赖。
创建虚拟环境:
python3 -m venv myenv # 创建名为myenv的虚拟环境 source myenv/bin/activate # 激活虚拟环境(激活后命令行前会显示(myenv))
激活后运行脚本:
虚拟环境会使用自身的Python解释器和包,执行python hello.py
时会自动使用虚拟环境中的Python版本。
退出虚拟环境:
deactivate
进阶运行技巧:参数传递、输入输出与后台执行
向脚本传递命令行参数
Python脚本可通过sys.argv
或argparse
模块接收命令行参数。
#!/usr/bin/env python3 import sys print(f"Script name: {sys.argv[0]}") print(f"Arguments: {sys.argv[1:]}")
执行时传入参数:
./script.py arg1 arg2 --option
输出:
Script name: ./script.py
Arguments: ['arg1', 'arg2', '--option']
输入输出重定向
Linux的输入输出重定向功能可与Python脚本结合使用:
- 输出重定向:将脚本输出保存到文件(
>
覆盖,>>
追加)python3 script.py > output.txt # 覆盖写入 python3 script.py >> output.txt # 追加写入
- 输入重定向:从文件读取输入(代替
input()
)python3 script.py < input.txt
- 管道符:将脚本输出作为其他命令的输入
python3 script.py | grep "error" # 过滤包含"error"的行
后台运行脚本
对于耗时较长的脚本,可将其放到后台运行,避免阻塞终端:
- 使用
&
符号:python3 script.py &
后台运行时,终端会显示进程ID(如
[1] 12345
),且脚本会继承当前终端的输入输出(若终端关闭,脚本可能终止)。 - 使用
nohup
忽略挂断信号:nohup python3 script.py > nohup.out 2>&1 &
nohup
:使脚本在终端关闭后继续运行。> nohup.out
:将标准输出重定向到nohup.out
。2>&1
:将标准错误(stderr)重定向到标准输出(stdout)。
- 使用
screen
或tmux
管理会话:
通过screen
创建持久化会话,可在终端关闭后重新连接:screen -S mysession # 创建会话 python3 script.py # 在会话中运行脚本 # 按Ctrl+A+D分离会话 screen -r mysession # 重新连接会话
调试与错误处理
使用pdb
调试器
Python内置调试器pdb
可帮助定位脚本错误:
python3 -m pdb script.py
进入调试模式后,常用命令:
n
(next):执行下一行代码。c
(continue):继续执行直到断点或结束。p 变量名
(print):打印变量值。q
(quit):退出调试器。
捕获异常与日志记录
脚本中可通过try-except
捕获异常,避免直接报错退出:
try: result = 10 / 0 except ZeroDivisionError as e: print(f"Error: {e}")
使用logging
模块记录日志,便于排查问题:
import logging logging.basicConfig(filename='app.log', level=logging.INFO) logging.info("Script started") try: result = 10 / 0 except ZeroDivisionError as e: logging.error(f"Error: {e}")
常见命令总结(表格)
操作场景 | 命令/操作 | 功能说明 |
---|---|---|
基础执行 | python3 script.py |
使用Python 3解释器执行脚本 |
指定Python版本 | /usr/bin/python3.8 script.py |
通过绝对路径指定Python 3.8版本执行 |
添加可执行权限 | chmod +x script.py |
为脚本添加可执行权限 |
直接运行脚本 | ./script.py |
需脚本首行包含正确的shebang(如#!/usr/bin/env python3 ) |
虚拟环境创建与激活 | python3 -m venv myenv; source myenv/bin/activate |
创建并激活虚拟环境,隔离项目依赖 |
传递命令行参数 | python3 script.py arg1 arg2 |
通过sys.argv 或argparse 模块接收参数 |
输出重定向 | python3 script.py > output.txt |
将脚本输出覆盖写入到文件 |
后台运行 | python3 script.py & |
在后台运行脚本,终端可继续其他操作 |
忽略挂断运行 | nohup python3 script.py & |
终端关闭后脚本继续运行,输出保存到nohup.out |
调试模式 | python3 -m pdb script.py |
启动Python调试器,逐行执行脚本并检查变量 |
相关问答FAQs
问题1:Linux下运行Python文件时提示“command not found”,如何解决?
解答:
该错误通常是因为系统未安装Python或Python未添加到环境变量$PATH
,解决方法:
- 检查Python是否安装:
python3 --version
,若未安装,可通过包管理器安装(如Ubuntu用sudo apt install python3
,CentOS用sudo yum install python3
)。 - 若Python已安装但不在
$PATH
,可通过绝对路径执行(如/usr/bin/python3 script.py
),或将其添加到$PATH
:- 编辑
~/.bashrc
文件:export PATH=$PATH:/usr/bin/python3
- 执行
source ~/.bashrc
使配置生效。
- 编辑
问题2:如何在Linux后台运行Python脚本并实时查看输出?
解答:
若需在后台运行脚本且实时查看输出,可结合nohup
和tail
命令:
- 使用
nohup
运行脚本并记录输出:nohup python3 script.py > output.log 2>&1 &
- 通过
tail -f
实时查看输出文件:tail -f output.log
若需停止后台运行的脚本,可通过
ps aux | grep python3
查找进程ID,再用kill 进程ID
终止进程。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16225.html