代码问题大全

发布时间 2023-11-21 11:46:00作者: Lockegogo

代码问题大全

不间断运行 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

使用场景:

  1. 长时间运行任务:在运行需要长时间运行的任务时,例如备份操作、爬虫程序等,Tmux 可以保证即使在网络断开或突然断电的情况下,任务仍然可以在后台运行。
  2. 多人协作: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 时显示找不到文件

  1. 运行 \(\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}"
        }
    ]
}
  1. debug 前进入代码相应文件夹:
cd code\

自动生成项目的依赖清单

生成 requirements.txt 的步骤如下:

  1. 安装 pipreqs 模块
pip install pipreqs
  1. 生成依赖清单:进入 python 项目的根目录,运行如下代码
pipreqs .

# 只列出主要依赖项(而不是包括依赖项的依赖项)
pipreqs . --no-pin

# 覆盖旧的清单文件
pipreqs . --force

这会扫描整个项目目录下的 python 文件,并根据导入信息生成一个名为 requirements.txt 的依赖清单文件,该清单将包括项目所依赖的所有第三方库及其版本号

  1. 安装依赖
pip install -r requirements.txt

生成目录树

  1. 在 Windows 命令行生成指定目录下的文件及其子目录的树形结构
# /F:在输出时包含文件名,而不仅仅是目录
tree /F your_pyfile_path > tree.txt

查找端口的进程信息

  1. Windows 系统:
# netstat:显示有关计算机网络连接和状态的信息
# -a:显示所有连接和侦听端口
# -o:显示与每个连接 / 端口关联的进程的 PID
# -n:使用数字表示 IP 地址和端口号
# findstr:文本查找工具,用于搜索包含特定字符串的行
netstat -aon | findstr “1080”
  1. Linux 系统:
sudo lsof -i :1080

创建 SpringBoot 项目报错

  1. 使用 IDEA 创建 SpringBoot 项目时,报错: "Initialization failed for 'https://start.spring.io",可以将服务器 URL 更换为:https://start.aliyun.com/
  2. 在 IDEA 中找到 Maven 的配置文件的地址,然后检查配置的远程仓库或者镜像有没有问题

image-20230514160056602

  1. 打开用户配置文件: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>
  1. 使用脚本删除 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
  1. 如果依赖还是报错,继续尝试:
    1. pom.xml 中的对应的依赖先删除,然后刷新右侧,之后再把依赖粘贴到 pom.xml 中,再次刷新
    2. 从本地仓库中将对应的包删除掉,然后让 maven 重新下载

Github Copilot 无法连接

  1. 方法一

    1. 打开猫
    2. Pycharm 文件 \(\to\) 设置 \(\to\) 外观与行为 \(\to\) 系统设置 \(\to\) HTTP 代理
    3. 选手动代理配置,勾选 HTTP,主机名填 127.0.0.1,端口号填 7890(猫 的端口号),点击确定
    4. 重启 pycharm,之后可以正常登录 copilot
  2. 方法二

    1. 打开猫
    2. 将代理端口改成与猫一样
    set http_proxy=http://127.0.0.1:7890
    set https_proxy=http://127.0.0.1:7890
    # 若要重置
    set http_proxy=
    
    1. 以 vscode 为例:文件 \(\to\) 首选项 \(\to\) 设置 \(\to\) 搜索 proxy,找到 http.proxy,将其值改为 http://127.0.0.1:7890