我正在使用 Python 3 编写一些代码来备份我的硬盘。
我的问题是,某些 RAID 和其他内容会隐藏某些驱动器的第一个和/或最后一个兆字节中的内容。我想确保复制并恢复任何此类内容。第一个兆字节很容易,但我不确定如何最好地完成最后一个兆字节。
我看到有关清除最后 1MB 的旧线程,但答案大多是在 shell 中。例如,请参阅擦除硬盘驱动器的最后 1MB
但我想阅读并恢复它,并且我想使用Python,所以我需要一些帮助。
我正在使用 Python 3 编写一些代码来备份我的硬盘。
我的问题是,某些 RAID 和其他内容会隐藏某些驱动器的第一个和/或最后一个兆字节中的内容。我想确保复制并恢复任何此类内容。第一个兆字节很容易,但我不确定如何最好地完成最后一个兆字节。
我看到有关清除最后 1MB 的旧线程,但答案大多是在 shell 中。例如,请参阅擦除硬盘驱动器的最后 1MB
但我想阅读并恢复它,并且我想使用Python,所以我需要一些帮助。
假设我正在构建一个 CLI 应用程序。假设它是用 Python 编写的。为了简单起见,假设此应用程序回显给定的目录或文件规范路径。
用户致电myApp .
.
我的应用程序如何知道它是从哪里调用的?shell 是否提供某种信息?环境变量?
扩展点似乎不起作用 ( echo ${.}
)。所以点本身作为参数是没有帮助的。它只是告诉我“当前目录”。但是,同样,我从哪里获取当前目录?
我通过 pamac UI 安装了 QGIS,只是发现它抱怨缺少一些插件所需的两个 Python 模块(osgeo、jinja2)。我的第一个想法是通过 pip 安装它们,但 pip 拒绝这样做:
$ pip install osgeo
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try 'pacman -S
python-xyz', where xyz is the package you are trying to
install.
If you wish to install a non-Arch-packaged Python package,
create a virtual environment using 'python -m venv path/to/venv'.
Then use path/to/venv/bin/python and path/to/venv/bin/pip.
If you wish to install a non-Arch packaged Python application,
it may be easiest to use 'pipx install xyz', which will manage a
virtual environment for you. Make sure you have python-pipx
installed via pacman.
note: If you believe this is a mistake, please contact your Python installation
or OS distribution provider. You can override this, at the risk of breaking your
Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
如果我做对了,我必须使用 pacman 来安装系统范围的软件包:
$ sudo pacman -S python-osgeo
error: target not found: python-osgeo
现在我迷路了。Pip 由于某些原因无法工作,如何做的建议也不起作用。有人可以向我解释如何在 Manjaro 上安装 python 包,以便 QGIS 可以使用它的插件吗?
我想使用模式和“魔术”标头在分区转储(二进制文件)中找到配置部分的重复副本。配置部分始终以 202'0xff'
字节开始,后跟 4 字节'\x00\x00\x23\x27'
。该脚本应识别分区内配置的不同副本,并打印模式开始出现的地址(以字节为单位)。我为我的模式调整了现有的 python 脚本,但它不起作用,只是抛出错误,因为字节与字符串混合。如何修复这个脚本?
#!/usr/bin/env python3
import re
import mmap
import sys
magic = '\xff' * 202
pattern = magic + '\x00\x00\x23\x27'
fh = open(sys.argv[1], "r+b")
mf = mmap.mmap(fh.fileno(), 0)
mf.seek(0)
fh.seek(0)
for occurence in re.finditer(pattern, mf):
print(occurence.start())
mf.close()
fh.close()
错误:
$ ./matcher.py dump.bin
Traceback (most recent call last):
File "/home/eviecomp/BC2UTILS/dump_previous_profile/./matcher.py", line 13, in <module>
for occurence in re.finditer(pattern, mf):
File "/usr/lib/python3.9/re.py", line 248, in finditer
return _compile(pattern, flags).finditer(string)
TypeError: cannot use a string pattern on a bytes-like object
图案和魔法:
有什么方法可以systemctl status
通过 python 使用 API?我正在寻找另一种在子进程中运行此命令的方法,因为我需要解析输出(如果将来输出更改可能会导致问题)。
我的树莓派 SD 卡上有 LinuxLite。Linux Lite 启动后自动运行的 Python 脚本“myscript.py”。我希望任何人都看不到脚本的代码,并且不能将此文件从 SD 卡复制到其他设备或其他 SD 卡。
我正在尝试运行在某处执行的脚本:python setup.py egg_info
这给了我一个错误。但是,如果我手动执行:python3 setup.py egg_info
我不会收到错误消息。
因此我尝试了sudo update-alternatives --config python
。这给出了:
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/python3.10 2 auto mode
* 1 /usr/bin/python3 1 manual mode
2 /usr/bin/python3.10 2 manual mode
3 /usr/bin/python3.8 0 manual mode
这应该将脚本重定向到正确版本的 python。但它仍然不起作用。我的猜测是因为 python3.10 仍然是自动模式版本。
对此我能做些什么吗?
提前谢谢了!!
我有linux服务器。
我希望有可以由 CLI 为我的服务器控制的无头 GUI。
我确实知道可以使用 XRDP 显示 GUI。但我希望我可以使用 SSH 或 CLI 来控制它。当我使用 XRDP 时它工作正常。
我安装了 OpenBox(一个 Windows 管理器)。我希望我可以与 CLI 交互 GUI,或者也许有可以处理它的 Python 库。
mouseclick(2,3) # mouse click area at coordinate (2,3)
screenshot("./current_screen.png") # saving screenshot of current screen in specified path.
库可以处理的另一个功能。
我找到了类似的库,它是pyautogui
.
但是pyautogui
如果有现有的 GUI 就可以工作。Display Not Found
如果我在 CLI 中运行它,我的意思是 python 脚本错误。
# t.py
import pyautogui
print(pyautogui.size())
它给了我错误:
root@server-kentang:~/py# python3 t.py
Traceback (most recent call last): File "/usr/local/lib/python3.8/dist-packages/Xlib/support/unix_connect.py", line 76, in get_socket
s.connect('/tmp/.X11-unix/X%d' % dno) FileNotFoundError: [Errno 2] No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File "t.py", line 1, in <module>
import pyautogui
File "/usr/local/lib/python3.8/dist-packages/pyautogui/__init__.py", line 249, in <module>
import mouseinfo
File "/usr/local/lib/python3.8/dist-packages/mouseinfo/__init__.py", line 223, in <module>
_display = Display(os.environ['DISPLAY'])
File "/usr/local/lib/python3.8/dist-packages/Xlib/display.py", line 80, in __init__
self.display = _BaseDisplay(display)
File "/usr/local/lib/python3.8/dist-packages/Xlib/display.py", line 62, in __init__
display.Display.__init__(*(self, ) + args, **keys)
File "/usr/local/lib/python3.8/dist-packages/Xlib/protocol/display.py", line 58, in __init__
self.socket = connect.get_socket(name, host, displayno)
File "/usr/local/lib/python3.8/dist-packages/Xlib/support/connect.py", line 76, in get_socket
return mod.get_socket(dname, host, dno)
File "/usr/local/lib/python3.8/dist-packages/Xlib/support/unix_connect.py", line 78, in get_socket
raise error.DisplayConnectionError(dname, str(val))
Xlib.error.DisplayConnectionError: Can't connect to display ":0": [Errno 2] No such file or directory
我需要完成过滤日志文件中机器人活动的任务。
解决方案应仅显示满足以下条件的记录
输入数据示例
[a lot of data]
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged in| -
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user changed password| -
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged off| -
Mon, 22 Aug 2016 13:15:42 +0200|178.57.66.225|faaaaaa11111| - |user logged in| -
Mon, 22 Aug 2016 13:15:40 +0200|178.57.66.215|terdsfsdfsdf| - |user logged in| -
Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user changed password| -
Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user logged off| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user changed password| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged off| -
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged in| -
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed password| -
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed profile| -
Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged off| -
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciaqulmla| - |user logged in| -
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciaqulmla| - |user changed password| -
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciaqulmla| - |user logged off| -
Mon, 22 Aug 2016 13:20:42 +0200|178.57.67.225|faaaa0a11111| - |user logged in| -
[a lot of data]
为了完成任务,我编写了下面的代码
awk 'BEGIN { FS=" " } { c[$5]++; l[$5,c[$5]]=$0 } END { for (i in c) { if (c[i] == 3) for (j = 1 ; j <= c[i]; j++) print l[i,j] } }' $1
用法:
./parse_log.sh 日志文件.log
输出:
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged in| -
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user changed password| -
Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged off| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user changed password| -
Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged off| -
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciaqulmla| - |user logged in| -
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciaqulmla| - |user changed password| -
Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciaqulmla| - |user logged off| -
但我想知道用 Perl 或 Python 编写的替代方案(使用最少的外部库)会是什么样子?