有没有一种方法可以直接告诉我的python程序将鼠标与os.system(“ import filename.png”)一起使用?

时间:2019-04-20 17:15:16

标签: python bash archlinux i3

我一直在尝试为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:成功

我尝试使用Google搜索,这并没有使我真正找到任何东西,也没有真正找到类似于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时,它应该将鼠标指针转换为“十字准线”,这样我可以选择一些内容并对其进行截图。 实际结果是,如果我正常运行它,则可以正常工作,但是,如果我尝试使用KeyboardShortcut,则除了输出到我的日志文件外,它什么也不会做。

我几乎是编程和linux的新手,我不知道为什么它找不到我的鼠标,我想知道我是否可以明确告诉程序使用它或是否有另一种方法来做到这一点。

非常感谢。

Hugenotte

1 个答案:

答案 0 :(得分:0)

我不久前写了一个bash脚本,使用非常常见的实用程序ImageMagick可以在Arch上找到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标志。

请注意,命名窗口很重要:花了我一些时间才弄清楚如何解决不命名窗口并在i3中使用该窗口上的no_focus的问题:

焦点将跳转到屏幕捕获窗口,因此我想从屏幕快照中跳出屏幕截图。您bash和python脚本所面临的问题可能与此有关。您必须强制i3将鼠标停留在旧窗口上,而不要跳到脚本触发的屏幕捕获窗口(默认情况下,i3会专注于新创建的窗口)。