小编Spa*_*arc的帖子

Python configparser不接受没有值的键

所以我正在编写一个从配置文件中读取的脚本,我想准确地使用它如何设计如下所述:http://docs.python.org/release/3.2.1/library/ configparser.html

我使用的是Python 3.2.1.完成后,该脚本将在使用相同版本的Python的Windows 2008 R2计算机上运行,​​或者假定兼容性,即当时的最新版本.

#!/user/bin/env python
import configparser

config = configparser.ConfigParser()
config.read('c:\exclude.ini')
config.sections()
Run Code Online (Sandbox Code Playgroud)

这可以正常读取exclude.ini文件 - 除非我有一个没有键的值.想到我可能做错了什么尝试解析这里列出的例子:http://docs.python.org/release/3.2.1/library/configparser.html#supported-ini-file-structure

它每次都会引发以下情况:

File "C:\Python32\lib\configparser.py", line 1081, in _read
    raise e
configparser.ParsingError: Source contains parsing errors: c:\exclude.ini
    [line 20]: 'key_without_value\n'
Run Code Online (Sandbox Code Playgroud)

我很茫然...我真的从文档中复制/粘贴我正在使用的精确python版本的示例代码,但它不能正常工作.我只能假设我错过了一些东西,因为我也找不到任何有类似问题的人.

python configparser python-3.x

16
推荐指数
1
解决办法
8575
查看次数

通配符不使用shlex在子进程调用中工作

语言:Python v2.6.2

操作系统:AIX 5.3

我正在使用Python将一些文件从备份恢复到测试系统 - 所有命令都以下面的方式调用,但有些只是简单的不想工作.

#!/usr/bin/python
import subprocess, shlex

cmd = 'sudo rm -rf /work/TEST/*'
arg = shlex.split(cmd)

# This does not work
p = subprocess.Popen(arg)

# This, however, works just fine
p = subprocess.Popen(cmd, shell=True)
Run Code Online (Sandbox Code Playgroud)

如果我从命令中删除*,它们可以正常工作(好吧,它们可以在没有通配符的情况下工作,这是不幸的不是我想要的).

出于明显的安全原因,我真的不想使用shell = True,但是有一些其他命令基本上做同样的事情.如果命令中有通配符,它​​将无法正常工作 - 它会毫无错误地执行,只是不执行任何操作.

有趣的是以下命令(通过shlex解析):

sudo mv /work/testrestore/production/* /work/TESTC
Run Code Online (Sandbox Code Playgroud)

产生以下内容:

mv:0653-401无法将/ work/testrestore/production/*重命名为/ work/TESTC/*:路径名中的文件或目录不存在.

这就好像unix现在正在尝试移动一个名为*的文件,而不是使用*作为通配符.这是shlex的典型行为吗?

编辑:我已经尝试用\来转义*,也尝试从单引号转换为双..不是我期望做任何事情.

python subprocess shlex

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

Python线程支持脚本的其余部分

在Windows 7 Pro 64位上运行Python 3.2.

好的,我在这里有一些非常基本的代码,这些代码并不像我想要的那样.

#!/usr/bin/env python

import time
import threading

def shutdown(sleeptime):
    time.sleep(sleeptime)
    print('I have executed')

threading.Thread(target = shutdown(5)).start()
print('I go first')
Run Code Online (Sandbox Code Playgroud)

这个想法是脚本运行,它启动一个休眠5秒钟的线程然后打印出"我已执行".与此同时,剧本继续前进并打印出"我先走了".

实际发生的是脚本启动线程,一切都等待它完成然后继续.显然我没有正确地进行线程化,但是我很难找到使用Python 3进行线程化的简单示例.

python multithreading

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