标签: piping

使用 sox splice 对一组音频文件进行淡入淡出

我可以使用 SoX 加入和淡入淡出两个音频文件,如下所示:

sox file1.wav file2.wav outfile.wav splice -q `soxi -D file1.wav`,0.5
Run Code Online (Sandbox Code Playgroud)

其中 soxi 替换是获取 file1 的持续时间,0.5 是交叉淡入淡出的长度。我现在试图将其扩展到任意数量的文件,以便将它们串在一起,中间有短的交叉淡入淡出。似乎有两种方法:管道和脚本。Sox 有一个 -p 选项,告诉它将输出视为管道输出(而不是写入文件)。但是,由于每个命令有许多输入和参数,不清楚在后续命令中如何分配输出(和输入?)。到目前为止,我有下面的行,它不起作用,试图扩展到 3 个文件。

sox -p file1.wav file2.wav splice -q `soxi -D file1.wav`,0.5 | sox -p file3.wav outfile.wav splice -q `soxi -D file3.wav`,0.5
Run Code Online (Sandbox Code Playgroud)

您对 sox 管道和脚本编写的提示将不胜感激。

audio scripting piping sox

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

使用pipe()系统调用

我一直在尝试使用pipe()系统调用来创建一个支持管道的shell(使用任意数量的命令).

不幸的是,我使用pipe()并没有太多运气.在花了几天时间查看各种在线资源之后,我决定整理一个过度简化的程序,该程序与执行具有相同的效果ls | sort,看看我是否能够为两个兄弟,子进程工作.这是代码:

#include <sys/wait.h>
#include <unistd.h>

void run(char *cmd) {
   char *args[2];
   args[0] = cmd;
   args[1] = NULL;

   execvp(cmd, args);
}

int main(void) {
    int filedes[2];
    pipe(filedes);

    pid_t pid_a, pid_b;

    if (!(pid_a = fork())) {
        dup2(filedes[1], 1);
        run("ls");
    }

    if (!(pid_b = fork())) {
        dup2(filedes[0], 0);
        run("sort");
    }

    waitpid(pid_a, NULL, 0);
    waitpid(pid_b, NULL, 0);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

管道是在父级中创建的,我知道在execvp()调用之后,每个子进程都继承了pipe()在父级中创建的文件描述符.对于这个ls过程,我使用dup2()将其标准输出(1)重定向到管道的写入端,对于该sort过程,标准输入(0)被重定向到管道的读取端.

最后,我等待两个进程完成后再退出.

我的直觉告诉我这应该有用,但事实并非如此!

有什么建议?

c posix piping

5
推荐指数
2
解决办法
8108
查看次数

sys.stdout.encoding为None,如何在不更改脚本的情况下修复它?

如果我使用管道运行python脚本,其中的sys.stdout.encoding将变为None并使其崩溃.如何在不修改脚本的情况下逃脱它?我出于某种原因无法修改它.

python encoding stdout piping

5
推荐指数
0
解决办法
1700
查看次数

如何判断管道操作员是否是链中的最后一个(或第一个)?

我最近一直在玩创建自己的管道,使用了很棒的pipe_with()功能magittr.我期待跟踪当前链中的管道数量(因此我的管道可以根据其在链中的位置而表现不同).我以为我从magrittrgithub页面得到了这个例子的答案:

# Create your own pipe with side-effects. In this example 
# we create a pipe with a "logging" function that traces
# the left-hand sides of a chain. First, the logger:
lhs_trace <- local({
  count <- 0
  function(x) {
    count <<- count + 1
    cl <- match.call()
    cat(sprintf("%d: lhs = %s\n", count, deparse(cl[[2]])))
  }
})

# Then attach it to a new pipe
`%L>%` <- pipe_with(lhs_trace)

# Try it out.
1:10 %L>% sin …
Run Code Online (Sandbox Code Playgroud)

r piping magrittr

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

从 shell 脚本将密码输入 openssl 命令

我正在尝试从 shell 脚本将 p12 转换为 pem,无需任何用户输入。我可以将密码作为脚本中的变量。

所以当我打电话时:

openssl pkcs12 -in *.p12 -out cert.pem -nodes
Run Code Online (Sandbox Code Playgroud)

终端打印“输入导入密码:”并等待输入。

我尝试使用以下方式输入密码:

echo $PASS | openssl pkcs12 -in *.p12 -out cert.pem -nodes
Run Code Online (Sandbox Code Playgroud)

以及尝试将标志与 openssl 命令一起使用,但不知道如何执行此操作。

shell openssl sh piping

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

通过批处理脚本将多个值传送到程序中

我正在编写自己的简单系统,允许我在 APK 上传到 GPlay 之前自动对其进行签名。我有一个可以进行签名的批处理文件;和一个“包装器”批处理文件,其内容将由 Jenkins 构建后在命令行上运行。

签名APKS.bat:

@echo off

set /p job= "Enter job name: "
set /p alias= "Enter key alias: "
set /p mobile= "Sign mobile? (y/n): "
set /p wear= "Sign wear? (y/n): "

echo.
echo "%job%"
echo "%alias%"
echo "%mobile%"
echo "%wear%"

[the rest of the code is sensitive so is emitted, but these variables are used later]
Run Code Online (Sandbox Code Playgroud)

包装代码:

@echo off

(echo test
echo test
echo y
echo y)| call sign_apks.bat
Run Code Online (Sandbox Code Playgroud)

本文向我展示了如何将值通过管道传输到程序中。引用答案:

Multiple lines …
Run Code Online (Sandbox Code Playgroud)

batch-file command-prompt piping

5
推荐指数
2
解决办法
7286
查看次数

Bash管道命令输出到sum循环

进入bash,我喜欢它,但似乎有很多细微之处最终会在功能方面产生很大的不同,不管怎么说,这就是我的问题:

我知道这有效:

total=0
for i in $(grep number some.txt | cut -d " " -f 1); do
    (( total+=i ))
done
Run Code Online (Sandbox Code Playgroud)

但为什么不呢?:

grep number some.txt | cut -d " " -f 1 | while read i; do (( total+=i )); done
Run Code Online (Sandbox Code Playgroud)

some.txt:

1 number
2 number
50 number
Run Code Online (Sandbox Code Playgroud)

for和while循环分别接收1,2和50,但for循环显示总变量最终为53,而在while循环代码中,它只保持为零.我知道我缺少一些基本知识,请帮助我.

我也没有得到管道的差异,例如,如果我跑

grep number some.txt | cut -d " " -f 1 | while read i; echo "-> $i"; done
Run Code Online (Sandbox Code Playgroud)

我得到了预期的输出

-> 1
-> 2
-> 50
Run Code Online (Sandbox Code Playgroud)

但如果这样跑的话

while read i; echo …
Run Code Online (Sandbox Code Playgroud)

bash piping

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

为什么在将财富的产出输入cowsay时不看工作

cowsay是一个愚蠢的linux工具,用于显示在终端中给出文本的牛.

$ cowsay hello
Run Code Online (Sandbox Code Playgroud)

fortune也是一个愚蠢的linux,用于在终端中显示"随机"引用.

$ fortune
Run Code Online (Sandbox Code Playgroud)

这两个命令都可以使用手表在终端中重复运行,例如

$ watch cowsay hello
$ watch fortune
Run Code Online (Sandbox Code Playgroud)

另外这两个命令可以组合在一起,所以牛说"随机"引号.通过将财富的产出输入cowsay.

$ fortune | cowsay
Run Code Online (Sandbox Code Playgroud)

然而,使用手表和管道输出命运到cowsay的组合没有做任何事情....即挂起直到过程结束

$ watch fortune | cowsay
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么?

linux watch piping

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

如果在 bash 中通过管道传输,使用 subprocess 和 xclip 的 Python 脚本会挂起

我有一个 python 脚本,需要将一些值输出到 stdin 并将另一个字符串复制到剪贴板。我正在使用该模块通过如下方式subprocess执行实用程序:xclipPopen

# clip.py
import subprocess
from subprocess import Popen

print('PRINT_ME')
p1 = Popen(['xclip', '-selection', 'clipboard'], stdin=subprocess.PIPE)
p1.communicate(input=('PASTE_ME'.encode()))
Run Code Online (Sandbox Code Playgroud)

该脚本按预期工作:PRINT_ME在 bash 中回显PASTE_ME并可粘贴,并立即返回。

当脚本输出通过管道传输到另一个命令时会出现问题。假设有人想使用以下命令重定向到文件和标准输入tee

$ python clip.py|tee file.txt
Run Code Online (Sandbox Code Playgroud)

该程序按预期工作但不返回,即 shell 不交还控制权。

如何解决这个问题?

一些重要信息xclip实用程序分叉自身(以应对 X 上剪贴板的实现)维护可复制的字符串,在 shell 中使用时它立即返回(它分叉到后台)。看来 shell 正在将clip.pystdin xclip/stdout 附加到tee.
如果xclip -selection clipboard发现正在使用ps u并杀死该命令,则返回。

我正在使用Python 3.4。
谢谢

python shell subprocess piping xclip

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

R(正则表达式)中管道操作中不包含单词的子集向量

如何为在管道操作中不包含单词的元素的向量进行子集化?(我真的很喜欢管道)

我希望有一些方法可以反转str_subset.在下面的示例中,我只想返回第二个元素x而不是元素hi:

library(stringr)
x <- c("hi", "bye", "hip")
x %>% 
    str_dup(2) %>%  # just an example operation
    str_subset("hi")  # I want to return the inverse of this
Run Code Online (Sandbox Code Playgroud)

regex r piping stringr

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

标签 统计

piping ×10

python ×2

r ×2

shell ×2

audio ×1

bash ×1

batch-file ×1

c ×1

command-prompt ×1

encoding ×1

linux ×1

magrittr ×1

openssl ×1

posix ×1

regex ×1

scripting ×1

sh ×1

sox ×1

stdout ×1

stringr ×1

subprocess ×1

watch ×1

xclip ×1