小编Dav*_*ker的帖子

Python子流程和用户交互

我正在使用Python 2.6中的GUI前端,通常它非常简单:您使用subprocess.call()subprocess.Popen()发出命令并等待它完成或对错误做出反应.如果您的程序停止并等待用户交互,您会怎么做?例如,程序可能会停止并询问用户是否有ID和密码或如何处理错误?

c:\> parrot
Military Macaw - OK
Sun Conure - OK
African Grey - OK
Norwegian Blue - Customer complaint!
(r) he's Resting, (h) [Hit cage] he moved, (p) he's Pining for the fjords
Run Code Online (Sandbox Code Playgroud)

到目前为止,我所阅读的所有内容都告诉您如何在程序完成后才读取程序的所有输出,而不是在程序运行时如何处理输出.我无法安装新模块(这是一个LiveCD),我将不止一次处理用户输入.

python command-line frontend subprocess popen

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

Python,subprocess,call(),check_call和returncode查找命令是否存在

我已经想出如何使用call()来获取我的python脚本来运行命令:

import subprocess

mycommandline = ['lumberjack', '-sleep all night', '-work all day']
subprocess.call(mycommandline)
Run Code Online (Sandbox Code Playgroud)

这有效,但是有一个问题,如果用户的命令路径中没有伐木工人怎么办?如果将伐木工人放在与python脚本相同的目录中,它会起作用,但是脚本如何知道它应该寻找伐木工人?我想如果有一个命令未找到错误,则樵夫不会命令路径,该脚本可以揣摩它的目录是什么,寻找伐木工人有最后警告用户复制成樵夫的一个如果两个地方都没有找到那两个地方.我如何找出错误信息是什么?我读到check_call()可以返回错误消息和一些关于returncode属性的信息.我找不到关于如何使用check_call()和returncode的示例,消息将是什么或如何判断消息是否为command-not-found.

我是否正确地走这条路?

python command-line subprocess call file-exists

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

使用带有tkinter的Python 3选择Text小部件中的所有文本

我正在研究我的第一个Python程序,并且不知道我在做什么.我想重新绑定ctrl-a(控件a)以选择Text小部件中的所有文本.当前绑定是ctrl- /(control /).绑定部分向右跳转到函数,但实际的文本选择不起作用.相反,光标跳转到第一行的第一个字符(就像它应该),没有其他任何事情发生.我确信这很容易修复但是花了一个小时就可以了,我无法弄清楚出了什么问题.

Python 3,Windows:

from tkinter import *

# Select all the text in textbox (not working)
def select_all(event):
    textbox.tag_add(SEL, "1.0", END)
    textbox.mark_set(INSERT, "1.0")
    textbox.see(INSERT)

# Open a window
mainwin = Tk()

# Create a text widget
textbox = Text(mainwin, width=40, height=10)
textbox.pack()

# Add some text
textbox.insert(INSERT, "Select some text then right click in this window")

# Add the binding
textbox.bind("<Control-Key-a>", select_all)

# Start the program
mainwin.mainloop()
Run Code Online (Sandbox Code Playgroud)

python tkinter python-3.x

13
推荐指数
2
解决办法
8169
查看次数

在OS-X中使用鼠标启动Python脚本的简便方法

我想编写跨平台的Python脚本,这些脚本是命令行程序的GUI前端.问题是我知道一些Mac用户认为使用终端与将他们的计算机从摩天大楼的顶部扔掉会产生同样的效果.在Linux和Windows中,设置Python脚本非常容易,因此用户可以双击图标,脚本将在不打开任何额外窗口的情况下启动.使用OS-X有一种简单的方法吗?用户是否必须安装与OS-X附带的Python不同的Python?我一直无法找到明确的答案.

python macos user-interface command-line frontend

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

用于删除特定行中的换行符的正则表达式

我有一个文本文件,每个段落都独占一行。有些段落在单词的开头被分割。例如:

Books are an effective way to 
communicate across time, both from the past and into the future.
Run Code Online (Sandbox Code Playgroud)

我可以在搜索中使用正则表达式(regex),并在 Notepad++ 或 Geany 中替换它们,以在行的开头搜索小写字母,并将 \r\n (回车符+换行符)替换为空间。
问题是章节的副标题位于单词“or”之后,而单词“or”单独占一行。例如:

Chapter 3 
The Importance of Reading 
or
Literature is the most agreeable way of ignoring life
Run Code Online (Sandbox Code Playgroud)

使用该方法会将“或”行放在章节标题中,而不是单独一行。

我想要的是告诉正则表达式一行是否以小写字母开头以匹配它(用空格替换后面的 \r\n),但如果该行是“or\r\n”则不告诉正则表达式。

regex text notepad++ geany

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

使用缓冲区在Python中计算二进制文件上的CRC/CRC32散列/校验和

我一直在努力教自己Python,所以我不完全理解我在做什么.我很尴尬地说这个,但我的问题应该很容易回答.我希望能够对二进制文件执行CRC校验和,代码类似于:

# http://upload.wikimedia.org/wikipedia/commons/7/72/Pleiades_Spitzer_big.jpg

import zlib

buffersize = 65536

with open('Pleiades_Spitzer_big.jpg', 'rb') as afile:
    buffr = afile.read(buffersize)
    while len(buffr) > 0:
        crcvalue = zlib.crc32(buffr)
        buffr = afile.read(buffersize)

print(format(crcvalue & 0xFFFFFFFF, '08x'))
Run Code Online (Sandbox Code Playgroud)

正确的结果应该是"a509ae4b"但我的代码的结果是"dedf5161".我认为正在发生的是校验和是在文件的第一个或最后一个64kb而不是整个文件上计算的.

如何更改代码以便检查整个文件而不将整个文件加载到内存中?

实际上,代码在Python 2.x或3.x中"起作用".如果代码已经是在一个或另一个,我宁愿它是在3.x的

python binary hash crc32 checksum

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

使用for循环在Python中设置对象列表的属性

我编写了一个Python程序,我需要将一组tkinter小部件从启用切换到禁用再返回.我可以这样做......

deadparrotlabel.config(state=DISABLED)
sillywalkslabel.config(state=DISABLED)
vikingslabel.config(state=DISABLED)
dinsdalelabel.config(state=DISABLED)
antpoetrylabel.config(state=DISABLED)
lumberjacklabel.config(state=DISABLED)
nudgenudgelabel.config(state=DISABLED)
saynomorelabel.config(state=DISABLED)
crunchyfroglabel.config(state=DISABLED)
larksvomitlabel.config(state=DISABLED)
Run Code Online (Sandbox Code Playgroud)

但我觉得应该有一个更有效的方式,使用for循环和列表或其他东西.我只是不知道如何让它工作,甚至可以做到.这是我尝试但它不起作用:

labellist = ['deadparrotlabel', 'sillywalkslabel', 'vikingslabel', 'dinsdalelabel', 'antpoetrylabel', 'lumberjacklabel', 'nudgenudgelabel', 'saynomorelabel', 'crunchyfroglabel', 'larksvomitlabel']
for i in lablelist:
    i.config(state=DISABLED)
Run Code Online (Sandbox Code Playgroud)

Python将'i'解释为字符串而不是对象的名称.我想做不可能的事吗?

python for-loop config tkinter list

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

键盘快捷键绑定,弹出上下文菜单和TypeErrors

我总是觉得当我在stackoverflow上问一个问题就像答案那样......应该是...... RTFM,即使我得到的每一个答案都是友好,耐心和接受的.经过一个下午试图找到答案,我被困住了.我想打开一个Tkinter,文本框和绑定键(键盘快捷键)和一个菜单项,所以我会有一个很好的弹出菜单(也就是上下文菜单),如Window的记事本,你右击,看看

Cut 
Copy 
Paste 
----- 
Select All
Run Code Online (Sandbox Code Playgroud)

Ctrl+ X,Ctrl+ C,Ctrl+ VCtrl+ A作为键绑定(我还没弄清楚如何进行撤销).问题是我无法同时使用键绑定和菜单弹出窗口来使用相同的功能.如果我从select_all()的定义中添加或删除"event"参数,则一个有效,但另一个则无效.

from Tkinter import *

# Clears the clipboard and copies the selected text to the it
def copy():
    mainwin.clipboard_clear()
    mainwin.clipboard_append(mainwin.selection_get())

# Needed for the right click pop-up menu to work, goes with copy()
def popup(event):
    popupmenu.post(event.x_root, event.y_root)

# Selects all text, used with the "control a" keybinding
def select_all(event):
    textbox.tag_add(SEL, "1.0", END)
    textbox.mark_set(INSERT, "1.0")
    textbox.see(INSERT) …
Run Code Online (Sandbox Code Playgroud)

python types keyboard-shortcuts contextmenu tkinter

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