我有一个关于环境变量的非常有趣的问题,并且谷歌搜索没有显示任何有意义的结果:
$ echo $BUCKET && python -c "import os; print os.environ['BUCKET']"
mule-uploader-demo
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'BUCKET'
Run Code Online (Sandbox Code Playgroud)
所以我有一个在 bash 中可用但在 python 中不可用的环境变量。怎么会发生这种情况以及如何解决它?以下是一些其他详细信息:
source envvars.sh通过命令设置环境变量envvars.sh文件仅包含如下所示的行:KEY=valueexport BUCKET=$BUCKET,它会起作用我有 anaconda python 发行版,~/anaconda/bin/python但是我可以使用什么 shebang 来调用这个版本的 python 而不是服务器上默认的旧版本?
# /opt/python/bin/python2.7是我一直在尝试的
我们有一个基于 Debian 的嵌入式设备。它运行一个通过串行(RS-232、/dev/ttyS*)与其他嵌入式设备通信的应用程序。通常,这效果很好。但当然,有时会出现问题,虽然我们的应用程序仍然可以毫无错误地发送字节,但另一端没有任何返回。
现在我希望能够区分
[A] 串行连接处于活动/启动/建立状态(我知道我可能使用了不恰当的术语),因为其他设备正在接收我们的数据。但无论出于何种原因,其他设备上的应用程序都不会与我们对话(例如,因为它崩溃了)。
[B] 串行连接未激活/启动/建立,例如因为电缆被拔出或其他设备断电。
有没有办法做到这一点?(就像以太网连接一样,很容易判断它是否有链接)
一些细节:
我将目录/子目录列表传递到剧本中,如下所示:
dirs=['Web\this','Web\that','Web']
Run Code Online (Sandbox Code Playgroud)
当我实际在这些目录上执行任务时(win_shell,调用构建过程),这工作得很好,但后来我需要复制文件,并且“\”在用作文件名的一部分时不起作用。我有兴趣使用以下内容,因此我将获取大多数构建的模块名称以及根文件夹中的“Web”:
dirs[1].split('\\')[-1]
Run Code Online (Sandbox Code Playgroud)
我希望这会分别返回“this”、“that”和“Web”。
但我找不到任何斜杠或正则表达式魔法的组合来分割我的字符串。我在 StackExchange 中发现了大约 5 个接近的问题/答案,但似乎没有一个能做到这一点。
我也尝试过这个与变化
"{{ dirs[1] | regex_replace('\\','-') }}"
Run Code Online (Sandbox Code Playgroud) 我有一堆服务负责运行从队列中消耗的操作。
我希望能够轻轻地重新启动服务(不中断已经在运行的操作)
可以通过处理 systemd 发送的 SIGTERM 并保存程序在处理当前操作后应退出的信息来解决。
还有一个小问题是,TimeoutStopSec在服务配置文件中定义的一段时间后,systemd 将发送额外的 SIGKILL 来残酷地终止我的进程。
我可以通过设置轻松避免它TimeoutStopSec=infinity。然后systemctl stop等到脚本自行终止,这可能会持续一个多小时,并导致我遇到主要问题。
我不希望systemctl命令等到脚本结束
看起来SendSIGKILL=no配置可以完成这项工作。这会导致SIGTERM在之后重试TimeoutStopSec,然后创建新的工作线程,并让旧的工作线程继续运行。
日志控制日志
May 06 14:14:43 jaku systemd[1]: Stopping Jaku test worker...
May 06 14:14:43 jaku python3[31597]: * 15 <frame object at 0x14d8108>
May 06 14:14:53 jaku systemd[1]: jaku-test-worker.service: State 'stop-sigterm' timed out. Skipping SIGKILL.
May 06 14:14:53 jaku python3[31597]: * 15 <frame object at 0x14d8108>
May 06 14:15:03 jaku systemd[1]: jaku-test-worker.service: State …Run Code Online (Sandbox Code Playgroud) 这很奇怪,我昨天在我的一台目标机器上注意到它,今天它也发生在其余的机器上。我还尝试从另一台机器运行剧本,但发生了同样的事情。看来这个问题是在 Ubuntu 20.04 上 apt 升级后出现的。第一次 apt 升级完成时,一切都很好,但之后模块开始出现故障。
错误输出如下:
TASK [common : Update package manager] *************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: module 'lib
' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'
fatal: [mr-bones]: FAILED! => changed=false
module_stderr: |-
Traceback (most recent call last):
File "<stdin>", line 107, in <module>
File "<stdin>", line 99, in _ansiballz_main
File "<stdin>", line 47, in invoke_module
File "/usr/lib/python3.8/runpy.py", line 207, in run_module
return _run_module_code(code, init_globals, run_name, …Run Code Online (Sandbox Code Playgroud) 目前我们正在为我们的生产服务器运行 CentOS。我们正在使用 Apache 2.2、mod_wsgi 和 PostgreSQL 部署 Django 项目。
我们正在将 Python 2.5 设为默认版本。但是,此版本不在标准 CentOS 存储库中。我对 Debian/ubuntu 的了解比 CentOS 多。对于此要求,什么是更好的发行版选择,为什么?
看来我有两个 python2.6 文件夹分别位于 /usr/lib 和 /usr/lib64 中。大多数 python 的东西(源代码)在 /usr/lib64/python2.6 中,但是当在安装的包中时,它们已被放入 /usr/lib/python2.6
当python被请求时系统如何决定去哪个目录,以及它如何找到我安装的包?
是否可以只为一个 shell 命令设置一个 ENV 变量(即在命令执行后立即过期)?
例如:
export VERSIONER_PYTHON_PREFER_32_BIT=yes
winpdb
Run Code Online (Sandbox Code Playgroud)
我想将我的系统设置为仅针对此命令使用 32 位 Python,然后返回到 64 位。也许像
VERSIONER_PYTHON_PREFER_32_BIT=yes; winpdb
Run Code Online (Sandbox Code Playgroud)
谢谢!