小编jam*_*meh的帖子

为什么Python的列表理解循环顺序倒退?

>>> my_list = [[[[1, 2, 3], [4, 5, 6], ]]]
>>> [a for d in my_list for c in d for b in c for a in b]
[1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

相当于

>>> my_list = [[[[1, 2, 3], [4, 5, 6], ]]]
>>> new_list = []
>>> for d in my_list:
...     for c in d:
...         for b in c:
...             for a in b:
...                 new_list.append(a)
... print(new_list):
[1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

从左到右阅读时,此语法似乎倒退.根据 …

python list-comprehension

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

如何避免"没有这样的文件或目录"错误的`make clean` Makefile目标

我有一个Makefile,它定义了.PHONY清理目标,用于清理.o文件和可执行文件,目标如下:

...
.PHONY : clean
clean:
    rm $(addprefix $(vq_DIR),$(vq_OBJS)) \
       $(addprefix $(vq_DIR),vq) \
       $(addprefix $(covq_DIR),$(covq_OBJS)) \
       $(addprefix $(covq_DIR),covq) \
       $(addprefix $(covq_2_DIR),$(covq_2_OBJS)) \
       $(addprefix $(covq_2_DIR),covq_2) \
       $(addprefix $(covq_2_DIR),$(test_OBJS)) \
       $(addprefix $(covq_2_DIR),test)
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作,但是当其中一些文件不存在时,rm会引发错误(没有这样的文件或目录),并且输出显示Makefile目标失败,当它明显做我想要的时候.

是否有一种很好的方法可以基本告诉rm命令"如果它们存在则删除这些文件,如果不存在则不要抱怨"?我查阅了联机帮助页rm,但没有找到这样的标志.

编辑:我实际上没有注意到-f联机帮助页中的标志描述,这是解决方案.

linux makefile rm

12
推荐指数
2
解决办法
2万
查看次数

Python Wave字节数据

我正在尝试从.wav文件中读取数据.

import wave
wr = wave.open("~/01 Road.wav", 'r')
# sample width is 2 bytes
# number of channels is 2
wave_data = wr.readframes(1)
print(wave_data)
Run Code Online (Sandbox Code Playgroud)

这给出了:

b'\x00\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

这是这首歌的"第一帧".这4个字节显然对应于每帧的(2个通道*2字节采样宽度)字节,但每个字节对应的是什么?

特别是,我试图将其转换为单声道振幅信号.

python audio wave

6
推荐指数
2
解决办法
1万
查看次数

使用 sympy 分解复数根

我不知道如何将多项式表达式分解为其复数根。

>>> from sympy import *
>>> s = symbol('s')
>>> factor(s**2+1)
 2
s  + 1
Run Code Online (Sandbox Code Playgroud)

python sympy complex-numbers

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

在 USR1 信号后可靠地终止睡眠进程

我正在编写一个 shell 脚本,它定期执行任务并从另一个进程接收到 USR1 信号。

脚本的结构类似于这个答案

#!/bin/bash

trap 'echo "doing some work"' SIGUSR1

while :
do
    sleep 10 && echo "doing some work" &
    wait $!
done
Run Code Online (Sandbox Code Playgroud)

但是,此脚本存在睡眠过程在后台继续并且仅在超时时终止的问题。(请注意,当在等待期间收到 USR1 时,睡眠进程会在其常规超时期间徘徊,但周期性回声确实被取消。)例如,您可以使用pkill -0 -c sleep.

我读了这个页面,它建议在陷阱动作中杀死挥之不去的睡眠,例如

#!/bin/bash

pid=
trap '[[ $pid ]] && kill $pid; echo "doing some work"' SIGUSR1

while :
do
    sleep 10 && echo "doing some work" &
    pid=$!
    wait $pid
    pid=
done
Run Code Online (Sandbox Code Playgroud)

但是,如果我们快速向 USR1 信号发送垃圾邮件,则此脚本会出现竞争条件,例如:

pkill -USR1 trap-test.sh; pkill -USR1 trap-test.sh
Run Code Online (Sandbox Code Playgroud)

然后它会尝试杀死一个已经被杀死的 …

linux bash shell sleep bash-trap

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

使用Python sh模块,如何不抑制交互式vim命令?

import sh
sh.vim("lalala")
Run Code Online (Sandbox Code Playgroud)

不会在我的控制台中显示vim编辑器.设置_bg=Falsekwarg没有变化(因为那已经是默认值)

如果我使用该subprocess模块,它的工作原理:

import subprocess
subprocess.call(["vim", "lalala"])
Run Code Online (Sandbox Code Playgroud)

python vim sh

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

为什么try/catch块需要括号BufferedWriter

我正在使用java.io.BufferedWriter编写一些代码,我尝试的第一件事是:

    String filename = new String("test.txt");
    Charset charset = new Charset("US-ASCII");
    try {
        BufferedWriter bw = Files.newBufferedWriter(Paths.get(filename), charset);
        bw.write("hello");
    } catch (IOException e) {
        System.out.println(e);
    }
Run Code Online (Sandbox Code Playgroud)

输出一个空的test.txt看到一个例子,按以下格式,我试过:

    String filename = new String("test.txt");
    Charset charset = new Charset("US-ASCII");
    try (BufferedWriter bw = Files.newBufferedWriter(Paths.get(filename), charset)){
        bw.write("hello");
    } catch (IOException e) {
        System.out.println(e);
    }
Run Code Online (Sandbox Code Playgroud)

输出第一行"hello"的文本文件.这种形式意味着什么,为什么它在我的第一次尝试没有时起作用?

java io try-catch bufferedwriter

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

FTP.delete(filename) from ftplib 错误

当我尝试ftp.delete()从 ftplib 使用时,它会引发error_perm, resp:

>>> from ftplib import FTP
>>> ftp = FTP("192.168.0.22")
>>> ftp.login("user", "password")
'230 Login successful.'
>>> ftp.cwd("/Public/test/hello/will_i_be_deleted/")
'250 Directory successfully changed.'
>>> ftp.delete("/Public/test/hello/will_i_be_deleted/")
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.py", line 520, in delete
resp = self.sendcmd('DELE ' + filename)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.py", line 243, in sendcmd
return self.getresp()
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.py", line 218, in getresp
raise error_perm, resp
ftplib.error_perm: 550 Delete operation failed.
Run Code Online (Sandbox Code Playgroud)

该目录存在,并且“用户”有足够的权限删除该文件夹。

该站点实际上是一个支持ftp的NAS(WD MyBookWorld)。 …

python ftp networking ftplib delete-file

0
推荐指数
1
解决办法
2万
查看次数