代码问题汇总
不间断运行 Python 文件
nohup
nohup
: 是 no hang up 的缩写,在 Linux 系统下启动一个不会随着终端关闭而终止的命令
使用场景:使用远程服务器运行程序,但是网络不稳定,一旦掉线运行就会终止,这时就需要使用
nohup
命令。
# -u: 设置 Python 解释器的缓冲模式为无缓冲(unbuffered),这样可以实时尽快刷新输出缓冲区,方便实时查看输出结果
# > nohup.out:输出重定向
# 2>&1:将标准错误 2 重定向到标准输出 &1,标准输出 &1 再被重定向输入到 nohup.out 文件中
# &:将命令放入后台运行,终端退出后命令仍旧执行
nohup python -u python_file.py > nohup.out 2>&1 &
如果要停止运行,可以使用 ps
命令来查看 PID,然后使用 kill
命令删除:
# a: 显示所有程序
# u: 以用户为主的格式来显示
# x: 显示所有程序,不区分终端机
ps -aux | grep "python_file.py"
# 找到 PID 后,使用 kill 删除
# -9:表示该进程强制终止
kill -9 进程号PID
Tmux
Tmux
:是 terminal multiplexer 的缩写,即终端复用器,可以启动一系列终端会话。通过一个终端登录主机并运行 tmux 后,我们可以开启多个控制台而无需浪费多余的终端来连接这台远程主机,而且终端关闭 shell 后里面的任务进程也不会中断。
参考:https://www.ruanyifeng.com/blog/2019/10/tmux.html
使用场景:
- 长时间运行任务:在运行需要长时间运行的任务时,例如备份操作、爬虫程序等,Tmux 可以保证即使在网络断开或突然断电的情况下,任务仍然可以在后台运行。
- 多人协作:Tmux 允许多个用户同时远程连接到同一会话中,这样就可以协同编辑文件、开发代码等。
# 在终端窗口运行 tmux,启动 tmux 伪窗口
tmux
# 启动命名 tmux
tmux new -s <name>
# 退出
exit or Ctrl + D
# 分离 session
tmux detach or Ctrl+b d # 退出当前 tmux 窗口,但是 session 和里面的进程仍然在后台运行
# 注意:tmux 有很多快捷键是通过前缀键触发的,一般为 ctrl+b,按下 ctrl+b 后需要松开键盘,然后再按下一个单独的功能键。
# 查看当前所有 session
tmux ls
# 重新进入 session
# 1. 使用 session 编号
tmux attach -t 0
# 2. 使用 session 名称
tmux attach -t <session-name>
# 杀死 session
tmux kill-session -t 0
tmux kill-session -t <session-name>
# 切换 session
tmux switch -t 0
tmux switch -t <session-name>
# 重命名 session
tmux rename-session -t 0 <new-name>
# 划分窗格
# 1. 划分上下两个窗格
tmux split-window
# 2. 划分左右两个窗格
tmux split-window -h
# 3. 关闭当前窗格
Ctrl+b x
最简操作流程如下:
# 1. 新建 session
tmux new -s my_session
# 2. 在 tmux 窗口运行所需程序
# 3. 分离 session
tmux detach
# 4. 下次使用时,重新连接到 session
tmux attach-session -t my_session
Debug 时显示找不到文件
- 运行 \(\to\) 打开配置(launch,json)\(\to\) 增加一行:
"cwd": "${fileDirname}"
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: 当前文件",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": true,
"cwd": "${fileDirname}"
}
]
}
debug
前进入代码相应文件夹:
cd code\
- 增加代码,解决问题
import os,sys
os.chdir(sys.path[0]) #使用文件所在目录
自动生成项目的依赖清单
生成 requirements.txt
的步骤如下:
- 安装
pipreqs
模块
pip install pipreqs
- 生成依赖清单:进入 python 项目的根目录,运行如下代码
pipreqs .
# 只列出主要依赖项(而不是包括依赖项的依赖项)
pipreqs . --no-pin
# 覆盖旧的清单文件
pipreqs . --force
这会扫描整个项目目录下的 python 文件,并根据导入信息生成一个名为 requirements.txt
的依赖清单文件,该清单将包括项目所依赖的所有第三方库及其版本号
- 安装依赖
pip install -r requirements.txt
生成目录树
- 在 Windows 命令行生成指定目录下的文件及其子目录的树形结构
# /F:在输出时包含文件名,而不仅仅是目录
tree /F your_pyfile_path > tree.txt
查找端口的进程信息
- Windows 系统:
# netstat:显示有关计算机网络连接和状态的信息
# -a:显示所有连接和侦听端口
# -o:显示与每个连接 / 端口关联的进程的 PID
# -n:使用数字表示 IP 地址和端口号
# findstr:文本查找工具,用于搜索包含特定字符串的行
netstat -aon | findstr “1080”
- Linux 系统:
sudo lsof -i :1080
创建 SpringBoot 项目报错
- 使用 IDEA 创建 SpringBoot 项目时,报错: "Initialization failed for 'https://start.spring.io",可以将服务器 URL 更换为:https://start.aliyun.com/
- 在 IDEA 中找到 Maven 的配置文件的地址,然后检查配置的远程仓库或者镜像有没有问题
- 打开用户配置文件:
C:\Users\Lockegogo\.m2\settings.xml
,配置阿里云仓库:
<!-- 配置阿里云仓库 -->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
- 使用脚本删除 Maven 中的 lastUpdated 文件
@echo off
rem 这里写你的仓库路径
set REPOSITORY_PATH=C:\Users\Lockegogo\.m2\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
del /s /q %%i
)
rem 搜索完毕
pause
- 如果依赖还是报错,继续尝试:
- 把
pom.xml
中的对应的依赖先删除,然后刷新右侧,之后再把依赖粘贴到 pom.xml 中,再次刷新 - 从本地仓库中将对应的包删除掉,然后让 maven 重新下载
- 把
Github Copilot 无法连接
-
方法一
- 打开猫
- Pycharm 文件 \(\to\) 设置 \(\to\) 外观与行为 \(\to\) 系统设置 \(\to\) HTTP 代理
- 选手动代理配置,勾选 HTTP,主机名填 127.0.0.1,端口号填 7890(猫的端口号),点击确定
- 重启 pycharm,之后可以正常登录 copilot
-
方法二
- 打开猫
- 将代理端口改成与猫一样
set http_proxy=http://127.0.0.1:7890 set https_proxy=http://127.0.0.1:7890 # 若要重置 set http_proxy=
- 以 vscode 为例:文件 \(\to\) 首选项 \(\to\) 设置 \(\to\) 搜索 proxy,找到 http.proxy,将其值改为
http://127.0.0.1:7890
使用 scp 上传文件
注意:要以绝对路径写清楚本地文件的位置
# 从服务器上下载文件
scp username@servername:/path/filename /tmp/local_destination
# 上传本地文件到服务器
scp /path/local_filename username@servername:/path
# 从服务器下载整个目录
scp -r username@servername:remote_dir/ /tmp/local_dir
# 上传目录到服务器
scp -r /tmp/local_dir username@servername:remote_dir
# 查看机器的用户名和 ip
query user
ifconfig
Android Studio 项目 sync 不成功
- 严格按照各版本配置:ndk 和 jdk
- 在
~/.bashrc
中配置环境变量,路径可以在 AS 中直接查看
export NDK=/home/lockegogo/Android/Sdk/ndk/21.4.7075529
export PATH=$NDK:$PATH
#JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
JAVA_HOME=/home/lockegogo/.jdks/corretto-11.0.20
#JAVA_HOME=/home/lockegogo/.jdks/corretto-1.8.0_382
CLASSPATH=$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME CLASSPATH
- 在
local.properties
文件中增加 ndk 路径
sdk.dir=/home/lockegogo/Android/Sdk
ndk.dir=/home/lockegogo/Android/Sdk/ndk/21.4.7075529
- 选择 Gradle JDK 版本:corretto-11
- 玄学步骤:https://segmentfault.com/q/1010000043160587
- 先按教程改
- 报错之后再该回来,就成功了
- 直接 File -> Invilidate caches 也可以达到不报错的目的
Vscode 导入包时显示找不到对应的模块
方法一:在文件开头导入项目根目录:
import sys
import os
# 获取当前脚本文件所在的目录路径
current_dir = os.getcwd()
# 获取项目根目录路径,根据实际情况调整级别
project_root = os.path.abspath(os.path.join(current_dir, "..", ".."))
# 将项目根目录添加到模块搜索路径中
if project_root not in sys.path:
sys.path.append(project_root)
# 检查模块搜索路径是否正确
print(sys.path)
方法二:将当前脚本所在的目录路径添加到 sys.path
列表中,以便 Python 解释器能够在该目录下查找和导入模块
import sys
import os
sys.path.append(os.path.dirname(__file__))
print(sys.path)
Vscode 加载 web 视图时出错
- 关闭 vscode
- 在 cmd 中输入:
code --no-sandbox
在开发环境中不能进入 conda
# 先运行
source activate
# 然后再进入对应的环境
conda activate env
将 conda 虚拟环境 env 加入 jupyter kernel
source activate
conda create -n tf-sms python==3.7.13
conda activate tf-sms
# 安装 tensorflow
conda insatll pip
pip install tensorflow==2.8.0
# 测试 tensorflow 是否正常安装
python -c "import tensorflow as tf; print(tf.__version__)"
# 安装其他依赖
pip install -r requirements.txt
# 安装 ipykernel
conda install ipykernel
python -m ipykernel install --user --name=env_name
# 刷新 jupyter 界面,在界面的右上角就可以选择新的 kernel 了
# 如果需要删除该 kernel
jupyter kernelspec list
jupyter kernelspec uninstall env_name
ndroid studio 中 的 gradle 不显示 build
解决方案:
- File -> Setting -> Experimental,将 Gradle 下的 Configure all Gradle ... 勾选4
- File -> Sync Project with Gradle FIles
将 apk 文件安装到安卓手机上
方法 1:如果失败的话尝试方法 2
adb install samples-debug-7.25.apk
方法 2:
adb push wear.apk /sdcard/wear.apk
将项目的根目录加入 path
为了增强代码的鲁棒性,最好将项目的根目录加入 path,方法如下:
import sys
import os
# 获取当前脚本所在目录
project_root = os.path.dirname(os.path.abspath(__file__))
# 将项目根目录添加到 sys.path
sys.path.insert(0, project_root)
Keras 画模型的输入输出图
import pydot
from keras.utils.vis_utils import plot_model
model = load_model("model.h5")
plot_model(
model.model,
to_file=os.path.join("model", model_name, "model.png"),
show_shapes=True,
show_layer_names=True,
)
标签:sys,文件,代码,汇总,tmux,问题,session,path,os
From: https://www.cnblogs.com/lockegogo/p/18011437