小编con*_*tti的帖子

xdotool 类型需要很长时间并导致整个桌面冻结

xdotool type过去我一直只使用xdotool type '¯\_(?)_/¯'. 这可行,但总是需要相当长的时间并导致整个桌面冻结(完全,而不仅仅是输入)几秒钟。不过也没有太打扰我。

现在我需要一种方法来从文件中读取内容,对其进行操作,然后将其输入。我想使用 xdotool 来完成这样的任务:

while read URL; do
    xdotool type "!play $URL" && sleep 1 && xdotool key Return && sleep 1
done < <(mycommand)
Run Code Online (Sandbox Code Playgroud)

mycommand大约20行的网址放了出来。一旦我运行脚本,我的桌面(gnome3.26,archlinux)就完全冻结了。我 SSHd 进入机器杀死 bash 进程(成功),但这对冻结状态没有任何作用。十分钟后,它再次运行,命令确实运行了(例如,xdotool 按预期正确键入了所有内容)但我不得不重新启动 X 服务器,因为我的鼠标不再工作了。

我需要一种方法来自动输入xdotool type,但没有这种冻结行为。最好的情况是一个工具,可以输入我几乎立即通过的整个文本。我想到了一个解决方案xclip,然后只是模拟粘贴和输入的按键,但我认为必须有一个更好的解决方案。

这个问题xdotool对我来说已经存在大约两年了(总是在 gnome + archlinux 上),但直到现在我只需要耸耸肩就不需要它了。我猜这不仅仅是因为我使用的版本中的错误。只是为了完整性:

$ xdotool --version xdotool version 3.20160805.1

linux keyboard bash gnome xdotool

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

python 是否有速记来检查对象是否具有属性?

背景是我从 JSON API 获取数据,其中许多字段是可选的,我想要数据库中的大部分字段。当特定字段不可用时,我希望将空字符串 ( "") 写入数据库。

目前我一直在做:

if jsonobject.what_i_look_for:
  dbstring = jsonobject.what_i_look_for
else:
  dbstring = ""
Run Code Online (Sandbox Code Playgroud)

然后将dbstring插入到数据库中。然而,我现在得到了更多这些字段,我想要一个更清晰的代码,而不是一个包含大约 80% 的 if 语句的函数。

我找到了if-shorthandsthis shorthand 来检查变量是否为空,但两者似乎都不能直接作为字符串工作。我已经print()在交互式 python 3.5.2 shell 中对此进行了测试:

>>> print(testvar or "")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'testvar' is not defined

>>> print(testvar if testvar else "")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'testvar' is not defined
Run Code Online (Sandbox Code Playgroud)

这: …

python string if-statement conditional-operator python-3.x

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

在python3中正确使用unicode字符-强制utf-8编码

我要疯了。互联网和这个 SO question告诉我,在 python 3.x 中,默认编码是 UTF-8。除此之外,我系统的默认编码是 UTF-8。除此之外,我# -*- coding: utf-8 -*-在我的 python 3.5 文件的顶部。

尽管如此,python 仍在使用 ascii:

# -*- coding: utf-8 -*-
mystring = "?"
print(mystring)
Run Code Online (Sandbox Code Playgroud)

跟我打招呼:

SyntaxError: 'ascii' codec can't decode byte 0xe2 in position 7: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我也试过这个:print(mystring.encode("utf-8")).decode("utf-8")- 同样的事情。

我在这里缺少什么?如何强制 python 停止使用 ascii 编码?


编辑:我知道position 7用一个字符串来抱怨似乎很奇怪,但这是我的实际 MCVE 和我得到的确切输出。上面是使用python shell,下面是脚本。两者都使用python 3.5.2.


编辑:因为我认为它可能是相关的:我得到的字符串来自外部应用程序并且不是硬编码的,所以我需要一种方法来获取该 utf-8 字符串并将其保存到文件中。以上只是一个最小化和通用化的例子。这是我的真实代码:

# the variables being a string that might contain unicode …
Run Code Online (Sandbox Code Playgroud)

python unicode encoding utf-8 python-3.x

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