有没有办法直接告诉我的 python 程序将鼠标与 os.system("import filename.png") 一起使用?
Is there a way to directly tell my python program to use the mouse with os.system("import filename.png")?
我一直在尝试为 arch 编写一个小的屏幕截图脚本。它可以工作,但问题是当我尝试在我的 i3-config 中为其分配一个键绑定时它什么也没做。
首先,我尝试在 bash 中完整地编写它,效果很好,但我无意中遇到了同样的问题,但它没有执行。
所以我已经将输出重定向到一个日志文件来检查它,它欢迎我:
import: unable to grab mouse '': Datei oder Verzeichnis nicht gefunden @ error/xwindow.c/XSelectWindow/9306.
import: unable to read X window image '': Erfolg @ error/xwindow.c/XImportImage/4942.
import: unable to read X window image '': Erfolg @ error/xwindow.c/XImportImage/5049.
import: `/home/lukas/Screenshot/20190419/scoot7.png' @ error/import.c/ImportImageCommand/1288.
翻译第一行:找不到文件或目录@错误[...]
翻译Erfolg:成功
我试过用谷歌搜索它,但并没有真正找到任何东西,我也没有真正找到任何类似于 error/xwindow.c 等等的路径。
这是我的代码:
#!/usr/bin/env python
import os, os.path
import datetime
import sys
d = datetime.datetime.today()
directory="/home/lukas/Screenshot/%s"%d.strftime('%Y%m%d')
if not os.path.exists(directory):
os.mkdir(directory)
fileCount = 1
for file in os.listdir(directory):
if file.endswith('.png'):
fileCount+=1
filename = "%s/scr%d.png"%(directory,fileCount)
os.system("import %s"%filename)
这是我的 i3 配置入口:
bindsym $mod+Shift+F12 exec --no-startup-id scoot > /tmp/log.out 2>&1
预期的结果是,当我按下 mod+shift+f12 时,它应该将我的鼠标指针转换为 "crosshair",这样我就可以 select的截图。
实际结果是,如果我 运行 它正常工作,但如果我尝试使用键盘快捷键,它只会输出到我的日志文件。
我几乎是编程的新手 linux,我不知道为什么它找不到我的鼠标,我想知道我是否可以明确告诉程序使用它或者是否有另一种方法。
非常感谢。
胡格诺特
我刚才写了一个 bash 脚本来做你想做的事情,使用 Arch 上非常常见的实用程序 ImageMagick that you can find here。
万一你愿意接受这个选择:
#!/bin/bash
# take screenshot using import from imagemagick
# allows to select the area by dragging across a rectangle
# or to select entire window by clicking inside it
set -e
# the date and time will be used as the file name
time=$(date +"%F_%H:%M:%S")
# naming the urxvt window "screenshot" so that the i3 "no_focus" option gets applied to it
urxvt -title "screenshot" -e bash -c "import $HOME/Screenshot/$time.png"
然后我在 i3 中使用它:
no_focus [title="screenshot"]
bindsym $mod+Shift+F12 layout tabbed; exec --no-startup-id bash my_script.sh
当然,您可能希望将日期格式更改为 python 中的日期格式。我喜欢有时间,以防我连续截取几个屏幕截图。并且您必须将 urxvt
替换为您的终端仿真器的名称,如果您的终端仿真器未以这种方式给 windows 一个名称,您可能必须调整 -title
标志。
请注意,命名 window 很重要:我花了一点时间才弄清楚如何在不命名 window 并在其上使用 no_focus
的情况下解决问题window 在 i3 中:
焦点将跳转到屏幕截图 window,因此超出了我想截屏的 window。您的 bash 和 python 脚本所面临的问题可能与此有关。您必须强制 i3 将鼠标保持在旧 window 上,而不是跳转到脚本触发的屏幕捕获 window(默认情况下,i3 将专注于新创建的 window) .
我一直在尝试为 arch 编写一个小的屏幕截图脚本。它可以工作,但问题是当我尝试在我的 i3-config 中为其分配一个键绑定时它什么也没做。
首先,我尝试在 bash 中完整地编写它,效果很好,但我无意中遇到了同样的问题,但它没有执行。 所以我已经将输出重定向到一个日志文件来检查它,它欢迎我:
import: unable to grab mouse '': Datei oder Verzeichnis nicht gefunden @ error/xwindow.c/XSelectWindow/9306.
import: unable to read X window image '': Erfolg @ error/xwindow.c/XImportImage/4942.
import: unable to read X window image '': Erfolg @ error/xwindow.c/XImportImage/5049.
import: `/home/lukas/Screenshot/20190419/scoot7.png' @ error/import.c/ImportImageCommand/1288.
翻译第一行:找不到文件或目录@错误[...] 翻译Erfolg:成功
我试过用谷歌搜索它,但并没有真正找到任何东西,我也没有真正找到任何类似于 error/xwindow.c 等等的路径。
这是我的代码:
#!/usr/bin/env python
import os, os.path
import datetime
import sys
d = datetime.datetime.today()
directory="/home/lukas/Screenshot/%s"%d.strftime('%Y%m%d')
if not os.path.exists(directory):
os.mkdir(directory)
fileCount = 1
for file in os.listdir(directory):
if file.endswith('.png'):
fileCount+=1
filename = "%s/scr%d.png"%(directory,fileCount)
os.system("import %s"%filename)
这是我的 i3 配置入口:
bindsym $mod+Shift+F12 exec --no-startup-id scoot > /tmp/log.out 2>&1
预期的结果是,当我按下 mod+shift+f12 时,它应该将我的鼠标指针转换为 "crosshair",这样我就可以 select的截图。 实际结果是,如果我 运行 它正常工作,但如果我尝试使用键盘快捷键,它只会输出到我的日志文件。
我几乎是编程的新手 linux,我不知道为什么它找不到我的鼠标,我想知道我是否可以明确告诉程序使用它或者是否有另一种方法。
非常感谢。
胡格诺特
我刚才写了一个 bash 脚本来做你想做的事情,使用 Arch 上非常常见的实用程序 ImageMagick that you can find here。
万一你愿意接受这个选择:
#!/bin/bash
# take screenshot using import from imagemagick
# allows to select the area by dragging across a rectangle
# or to select entire window by clicking inside it
set -e
# the date and time will be used as the file name
time=$(date +"%F_%H:%M:%S")
# naming the urxvt window "screenshot" so that the i3 "no_focus" option gets applied to it
urxvt -title "screenshot" -e bash -c "import $HOME/Screenshot/$time.png"
然后我在 i3 中使用它:
no_focus [title="screenshot"]
bindsym $mod+Shift+F12 layout tabbed; exec --no-startup-id bash my_script.sh
当然,您可能希望将日期格式更改为 python 中的日期格式。我喜欢有时间,以防我连续截取几个屏幕截图。并且您必须将 urxvt
替换为您的终端仿真器的名称,如果您的终端仿真器未以这种方式给 windows 一个名称,您可能必须调整 -title
标志。
请注意,命名 window 很重要:我花了一点时间才弄清楚如何在不命名 window 并在其上使用 no_focus
的情况下解决问题window 在 i3 中:
焦点将跳转到屏幕截图 window,因此超出了我想截屏的 window。您的 bash 和 python 脚本所面临的问题可能与此有关。您必须强制 i3 将鼠标保持在旧 window 上,而不是跳转到脚本触发的屏幕捕获 window(默认情况下,i3 将专注于新创建的 window) .