相关疑难解决方法(0)

如何在单个表达式中合并两个词典?

我有两个Python字典,我想编写一个返回这两个字典的表达式,合并.update()如果它返回结果而不是就地修改dict,那么该方法将是我需要的.

>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 10, 'c': 11}
>>> z = x.update(y)
>>> print(z)
None
>>> x
{'a': 1, 'b': 10, 'c': 11}
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得最终合并的词典z,不是x吗?

(要清楚的是,最后一次胜利的冲突处理dict.update()也是我正在寻找的.)

python merge dictionary

4349
推荐指数
41
解决办法
168万
查看次数

如何在Python中获取PATH环境变量分隔符?

当需要连接多个目录时,如在可执行搜索路径中,存在与os相关的分隔符.对于Windows来说';',对于Linux来说就是这样':'.Python中是否有一种方法可以分割哪个字符?

在讨论这个问题时如何使用python找出我的python路径?,建议os.sep会这样做.答案是错误的,因为它是目录或文件名组件的分隔符,等同于'\\''/'.

python operating-system environment-variables

152
推荐指数
4
解决办法
8万
查看次数

python子进程Popen环境PATH?

我对subprocess使用时如何搜索可执行文件感到困惑Popen().如果给定子进程的绝对路径,它可以工作,但我正在尝试使用相对路径.我发现如果我设置环境变量PYTHONPATH然后我可以从该路径获得导入的模块,并且PYTHONPATH存在sys.path,但它似乎没有帮助的行为subprocess.Popen.我也尝试过编辑sitecustomize.py添加PYTHONPATH 的文件os.environ,就像这样

# copy PYTHONPATH environment variable into PATH to allow our stuff to use
# relative paths for subprocess spawning
import os
if os.getenv('PYTHONPATH') is not None and os.getenv('PATH') is not none:
    os.environ['PATH'] = ':'.join([os.getenv('PATH'), os.getenv('PYTHONPATH')])
Run Code Online (Sandbox Code Playgroud)

并且验证了在启动python时,无论是交互式地,使用ipython,还是通过从命令行运行脚本,PYTHONPATH都成功出现os.environ.但是,subrocess.Popen 仍然不在那里搜索可执行文件.如果没有env指定kwarg ,我认为它应该继承父母的环境?接下来我尝试env明确地给出,首先通过制作副本,os.getenv然后仅仅通过给予env={'PATH': '/explicit/path/to/search/from'},它仍然找不到可执行文件.现在我很难过.

希望一个例子可以帮助我更清楚地解释我的问题:

/ dir/subdir1/some_executable
/dir/subdir2/some_script.py

# some_script.py
from subprocess import Popen, PIPE
spam, eggs = Popen(['../subdir1/some_executable'], …
Run Code Online (Sandbox Code Playgroud)

python environment subprocess path popen

56
推荐指数
2
解决办法
6万
查看次数

Python:在subprocess.Popen(..)中导出环境变量

我在调用时设置环境变量时遇到问题subprocess.Popen.环境变量似乎没有设置.有关如何为Python命令行调用正确设置环境变量的任何建议?

我的目标是运行一个脚本,该脚本使用根据我的Python代码确定的环境变量:

d = dict(os.environ)
d["TEST_VARIABLE"] = str(1234)
subprocess.Popen('/usr/bin/mybinary', env=d).wait()
Run Code Online (Sandbox Code Playgroud)

但脚本的反应就像从未设置变量一样

这是我尝试使用Python的交互式解释器进行测试:

d = dict(os.environ)
d["TEST_VARIABLE"] = str(1234)
subprocess.Popen(['/bin/echo', '$TEST_VARIABLE'], env=d).wait() 
Run Code Online (Sandbox Code Playgroud)

输出是:

"$TEST_VARIABLE"
0
Run Code Online (Sandbox Code Playgroud)

我认为env=d应该为子进程设置环境,但显然没有.有关如何纠正此问题的任何建议?

python environment-variables python-2.7

28
推荐指数
3
解决办法
3万
查看次数

如何在python脚本中获取exe的输出?

当我.exe用Python 调用外部程序时,如何printf.exe应用程序获取输出并将其打印到我的Python IDE中?

python ide executable redirect

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

pg_dump:如何在Amazon Linux上安装PostgreSQL 9.5.2?

我曾经安装并做:

$ sudo yum install -y postgresql94-server postgresql94
$ pg_dump -h name-of-db.us-east-1.rds.amazonaws.com -U user dbName > dump
Run Code Online (Sandbox Code Playgroud)

在RDS升级到9.5.2后,我得到了这个:

pg_dump: server version: 9.5.2; pg_dump version: 9.4.5
pg_dump: aborting because of server version mismatch
Run Code Online (Sandbox Code Playgroud)

我找不到适合Amazon Linux的软件包

这对我没有帮助:http://tecadmin.net/install-postgresql-9-5-on-centos/

你能?

postgresql amazon-ec2 rds

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

Python脚本没有在调用pysaunter的crontab中运行

我已经阅读了多篇帖子和许多文章,详细说明了cron作业中的scipts需要保持在脚本本身内部运行所必需的环境变量,因为在cron中打开了shell.我的情况是独特的,因为我的路径变量都是按照讨论的方式设置的,这反过来会使用subprocess.call ()成功调用pysaunter python egg ,但它似乎从那里分解.这导致整个过程在cron作业中中断.

为清楚起见,以下是我所指的步骤:

1) cronjob calls run_test.py -n foo
2) run_test.py sets the environment variables correctly 
(cur_shell_path=sys.path (converted to proper path string, not shown here)
 my_env= os.environ.copy()
 my_env["PATH"] = my_env["PATH"] + cur_shell_path)
3) run_test.py calls subprocess.call("pysaunter -m foo -v", env=my_env, shell=True)
Run Code Online (Sandbox Code Playgroud)

步骤3的输出显示它正在找到egg并成功开始从pysaunter加载必要的模块,但是当它试图找到用于修改pysaunter的目录时它会中断.错误如下:

ImportError: no module named helpers
Run Code Online (Sandbox Code Playgroud)

我曾多次尝试将此路径添加到环境中,但它似乎永远不会找到包含helpers.py的目录.pysaunter -m foo -v从交互式shell调用时,该命令正常工作.

我在pysaunter上找不到多少帮助,所以我认为这里过多的pysaunter细节是不必要的.如果您了解更多有关pysaunter的信息,请告知我们您是否需要更多信息.我不知道该分享什么.

我还阅读了很多帖子,讨论了通过编辑.profile/.bash_profile来改变shell默认行为的能力.我试图找到一个可以使我的路径变量全局可访问的地方,但我找不到任何东西.我不确定这是怎么做的,它可以解决我的问题,所以如果你对此有所了解,请告诉我.

最后说明,这是在Mac 10.7.5上运行的.

python shell cron crontab cron-task

6
推荐指数
1
解决办法
2648
查看次数

python subprocess.popen 不尊重 LD_LIBRARY_PATH

我正在尝试使用 python 脚本中的以下代码从 python 生成一个子进程:

p = subprocess.Popen(['./appleseed.cli', '--version'])
Run Code Online (Sandbox Code Playgroud)

问题是该命令依赖于共享库,因此出现以下错误

./appleseed.cli: error while loading shared libraries: libappleseed.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在系统中有主要的二进制文件,PATH也有 lib ,LD_LIBRARY_PATH但这似乎没有帮助。这些设置在~/.bash_profile.

有趣的是,如果我在交互式 python 会话中运行相同的代码,它也可以工作,同时也将命令指定为appleseed.cli没有./工作。

我正在运行 ubuntu 和 python 2.7

更新:

这是我正在使用的完整 python 文件:

import argparse
import subprocess


def print_appleseed_version(args):

    p = subprocess.Popen(['./appleseed.cli', '--version'])


def main():
    # Parse the command line.
    parser = argparse.ArgumentParser()
    parser.add_argument("-t", "--tool-path", metavar="tool-path")
    args = parser.parse_args()
    
    print_appleseed_version(args)


if …
Run Code Online (Sandbox Code Playgroud)

python dll subprocess

5
推荐指数
0
解决办法
1937
查看次数

在Python中复制shell环境以执行bash命令

我正在尝试使用该模块从 python 内部执行 bash 脚本subprocess。问题是这个 bash 脚本依赖于我的文件中设置的许多环境变量.bashrc。我想要的是 python 子进程能够准确复制启动终端窗口时设置的环境。到目前为止我尝试过:

p = subprocess.Popen(args=['my-script.sh', '--additional_args'], stdout=subprocess.PIPE, env=os.environ.copy(), shell=True)
output_buffer, return_code = p.communicate()
Run Code Online (Sandbox Code Playgroud)

但后来在某处读到,即使在执行完之后shell=True.bashrc文件仍然没有加载,我应该尝试这样的事情:

p = subprocess.Popen(args=['/bin/bash', '-i', '-c', 'my_script.sh', '--additional_args'], stdout=subprocess.PIPE)
output_buffer, return_code = p.communicate()
Run Code Online (Sandbox Code Playgroud)

但是通过这个函数调用,我得到这个错误:

tput: No value for $TERM and no -T specified
bash: cannot set terminal process group (2071): Inappropriate ioctl for device
bash: no job control in this shell
Run Code Online (Sandbox Code Playgroud)

python linux bash shell

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

Python调用不需要虚拟环境的子进程

我有一个 Python 3.6 脚本,它使用子进程调用第三方工具。

main_script.py:

#!/usr/bin/env python
import subprocess
result = subprocess.run(['third-party-tool', '-arg1'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

问题是,main_script.py必须从虚拟环境中运行,并且third-party-tool必须从任何虚拟环境中运行。

我对此了解不多third-party-tool,只知道它在我的道路上。当我有一个活动的虚拟环境时调用它会导致它堵塞并稍后抛出异常。我不知道它是否使用默认的 python 二进制文件,或者它启动自己的虚拟环境并在那里执行操作。它不是一个 Python 脚本,但显然以某种方式调用一个脚本。

如何告诉子进程退出虚拟环境并在默认 shell 环境中运行命令?

我研究过几个类似的问题:

python environment virtual subprocess

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

Maven命令mvn从终端运行没有错误,但从python没有错误

我正在尝试从 python 脚本运行 Maven 项目。我已经安装了 apache maven。运行命令:mvn exec:java -D"exec.mainClass"="org.matsim.project.RunMatsim"从终端在 pom.xml 所在的项目文件夹中,不会产生错误并且项目运行正常。

但是当从我的 python 脚本运行以下代码时

import subprocess as sp

def execute(cmd):
    popen = sp.Popen(cmd, stdout=sp.PIPE, universal_newlines=True,shell=True)
    for stdout_line in iter(popen.stdout.readline, ""):
        yield stdout_line 
    popen.stdout.close()
    return_code = popen.wait()
    if return_code:
        raise sp.CalledProcessError(return_code, cmd)

for path in execute(["mvn", "exec:java" ,'-D"exec.mainClass"="org.matsim.project.MatsimRun"']):
    print(path, end="")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[错误] 没有为此构建指定目标。您必须以 : 或 :[:]: 格式指定有效的生命周期阶段或目标。可用的生命周期阶段有:验证、初始化、生成源、处理源、生成资源、处理资源、编译、处理类、生成测试源、处理测试源、生成测试资源、处理-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify`

为什么会这样?可能有什么问题?

两种情况(终端、python 脚本)发生的警告相同。

java shell subprocess maven python-3.x

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