标签: python

环境变量在Python中不可用

我有一个关于环境变量的非常有趣的问题,并且谷歌搜索没有显示任何有意义的结果:

$ 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=value
  • 我在 bash 和 zsh 中重现了这个
  • 如果我这样做export BUCKET=$BUCKET,它会起作用

python bash environment-variables

5
推荐指数
1
解决办法
5719
查看次数

我的服务器目录中的 Anaconda Python 有何作用

我有 anaconda python 发行版,~/anaconda/bin/python但是我可以使用什么 shebang 来调用这个版本的 python 而不是服务器上默认的旧版本?

# /opt/python/bin/python2.7是我一直在尝试的

scripting unix python bash

5
推荐指数
2
解决办法
1万
查看次数

如何判断串行连接是否“建立”?

我们有一个基于 Debian 的嵌入式设备。它运行一个通过串行(RS-232、/dev/ttyS*)与其他嵌入式设备通信的应用程序。通常,这效果很好。但当然,有时会出现问题,虽然我们的应用程序仍然可以毫无错误地发送字节,但另一端没有任何返回。

现在我希望能够区分

  • [A] 串行连接处于活动/启动/建立状态(我知道我可能使用了不恰当的术语),因为其他设备正在接收我们的数据。但无论出于何种原因,其他设备上的应用程序都不会与我们对话(例如,因为它崩溃了)。

  • [B] 串行连接激活/启动/建立,例如因为电缆被拔出或其他设备断电。

有没有办法做到这一点?(就像以太网连接一样,很容易判断它是否有链接)


一些细节:

  • NS16550A芯片带serial8250驱动
  • Debian 7 32 位
  • 应用程序是Python 2.7

linux python serial tty

5
推荐指数
1
解决办法
309
查看次数

Ansible 在反斜杠上分割字符串

我将目录/子目录列表传递到剧本中,如下所示:

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)

python regex ansible ansible-playbook

5
推荐指数
1
解决办法
1万
查看次数

让 systemd 服务稍后停止,而不阻塞“systemctl stop”

我有一堆服务负责运行从队列中消耗的操作。

我希望能够轻轻地重新启动服务(不中断已经在运行的操作)

可以通过处理 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)

python signals systemd

5
推荐指数
1
解决办法
1万
查看次数

Ansible OpenSSL apt 模块错误

这很奇怪,我昨天在我的一台目标机器上注意到它,今天它也发生在其余的机器上。我还尝试从另一台机器运行剧本,但发生了同样的事情。看来这个问题是在 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)

python openssl apt ansible

5
推荐指数
1
解决办法
8733
查看次数

我应该为 Apache、mod_wsgi、Python、Django、PostgreSQL 部署使用哪个 Linux 发行版?

目前我们正在为我们的生产服务器运行 CentOS。我们正在使用 Apache 2.2、mod_wsgi 和 PostgreSQL 部署 Django 项目。

我们正在将 Python 2.5 设为默认版本。但是,此版本不在标准 CentOS 存储库中。我对 Debian/ubuntu 的了解比 CentOS 多。对于此要求,什么是更好的发行版选择,为什么?

linux deployment python django apache-2.2

4
推荐指数
2
解决办法
1665
查看次数

fedora /usr/lib 与 /usr/lib64

看来我有两个 python2.6 文件夹分别位于 /usr/lib 和 /usr/lib64 中。大多数 python 的东西(源代码)在 /usr/lib64/python2.6 中,但是当在安装的包中时,它们已被放入 /usr/lib/python2.6

当python被请求时系统如何决定去哪个目录,以及它如何找到我安装的包?

python fedora libraries

4
推荐指数
2
解决办法
8337
查看次数

默认为 debian python2.6?

是否可以以某种方式将 debian lenny 的默认 python 设置为 2.6?

debian python

4
推荐指数
1
解决办法
5756
查看次数

仅为一个 shell 命令临时设置 ENV 变量?

是否可以只为一个 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)

谢谢!

python shell environment-variables

4
推荐指数
1
解决办法
4069
查看次数