我正在使用 WEBrick 构建一个小型应用程序。它运行良好。但是,它占用了一个端口。我宁愿将其实现为 unix 套接字,但我不知道该怎么做。
我正在使用 WEBrick 版本 1.8.1 和 ruby 3.0.2p107 (2021-07-07 修订版 0db68f0233) [x86_64-linux-gnu]
我正在使用 WEBrick 构建一个小型应用程序。它运行良好。但是,它占用了一个端口。我宁愿将其实现为 unix 套接字,但我不知道该怎么做。
我正在使用 WEBrick 版本 1.8.1 和 ruby 3.0.2p107 (2021-07-07 修订版 0db68f0233) [x86_64-linux-gnu]
我理解文件锁定的一般概念,但恐怕细节我不太清楚。我想打开一个文件进行写入,获取独占锁,但要等待几秒钟才能放弃获取锁。我到目前为止:
File.open(path, 'a') do |file|
if file.flock(File::LOCK_EX | File::LOCK_NB)
file.seek(0, IO::SEEK_END)
file.write('my content')
else
puts "Could not acquire lock, another process is using the file"
end
end
我如何等待锁x秒?
我正在编写一个脚本,该脚本可能会在程序的许多不同点正常退出。该脚本当前始终在确保块中向 STDOUT 输出一条消息,如下所示:
begin
exit
ensure
puts "my message"
end
问题是,如果脚本崩溃,消息无论如何都会输出,然后是错误消息。我想要做的是只在退出 0 时输出消息,如下所示:
begin
exit 1
ensure
if is_this_a_normal_exit?()
puts 'my messsage'
end
end
有办法吗?
是否有 Ruby 模块或类提供有关当前正在运行但不是当前进程的信息?例如,如果我有 pid 1234,我想获取有关进程用户、时间等的信息。我可以通过 shell 来获取此信息ps
,但我更喜欢从 Ruby 获取信息。例如,类似于以下虚构代码:
require 'process/info'
process = ProcessInfo.new(1234)
puts process.pid
puts process.user
任何帮助都值得感激。
我敢打赌这很容易,但我真不知道该怎么弄。标准免责声明,老实说,我曾试图弄明白这一点。
如何使用时区缩写更改 datetime.datetime 对象的时区?例如,如果我有一个对象的时区为 EST,那么如何获取 PST 的相同日期时间?
你会怎么做这样的事情:
from datetime import datetime
now = datetime.now().astimezone()
pst = your_magic_function(now, 'PST)
TLDR:我的目标很简单。我有一个 PNG 文件。我想使用 Python 在其中绘制一个矩形并将其保存到新文件中。
我有一个 PNG 文件(附在本帖中)。我只想使用 Python 在图像中绘制一个矩形,然后将图像保存到新文件中。以下代码不起作用:
import png
org_path = './arragon.png'
altered_path = './altered.png'
f = open(org_path, 'rb')
image = png.Reader(file=f)
width, height, rows, metadata = image.read()
for row in rows:
for i in range(len(row)):
row[i] = 255
writer = png.Writer(
width=width,
height=height,
bitdepth=metadata['bitdepth'],
greyscale=metadata['greyscale'],
alpha=metadata['alpha']
)
writer.write(open(altered_path, 'wb'), rows)
最后一行产生以下错误:
Traceback (most recent call last):
File "/home/miko/tmp/alter-image/./edit.py", line 23, in <module>
writer.write(open(altered_path, 'wb'), rows)
File "/home/miko/.local/lib/python3.10/site-packages/png.py", line 670, in write
raise ProtocolError(
png.ProtocolError: ProtocolError: rows supplied (0) does not match height (450)
现在,为了分解它,我尝试将图像对象复制到 Writer,而不进行任何更改:
import png
f = open(org_path, 'rb')
image = png.Reader(file=f)
width, height, rows, metadata = image.read()
writer = png.Writer(
width=width,
height=height,
bitdepth=metadata['bitdepth'],
greyscale=metadata['greyscale'],
alpha=metadata['alpha']
)
writer.write(open(altered_path, 'wb'), rows)
然后我收到此消息:
Traceback (most recent call last):
File "/home/miko/tmp/alter-image/./edit.py", line 23, in <module>
writer.write(open(altered_path, 'wb'), rows)
File "/home/miko/.local/lib/python3.10/site-packages/png.py", line 668, in write
nrows = self.write_passes(outfile, check_rows(rows))
File "/home/miko/.local/lib/python3.10/site-packages/png.py", line 703, in write_passes
return self.write_packed(outfile, rows)
File "/home/miko/.local/lib/python3.10/site-packages/png.py", line 738, in write_packed
for i, row in enumerate(rows):
File "/home/miko/.local/lib/python3.10/site-packages/png.py", line 658, in check_rows
raise ProtocolError(
png.ProtocolError: ProtocolError: Expected 633 values but got 211 values, in row 0
我完全搞不清楚哪里出了问题。有人能告诉我该怎么做吗?