我正在 Windows 上工作,我正在尝试学习管道及其工作原理。
我还没有发现的一件事是如何判断管道上是否有新数据(来自管道的子/接收器端?
通常的方法是有一个线程读取数据并将其发送以进行处理:
void GetDataThread()
{
while(notDone)
{
BOOL result = ReadFile (pipe_handle, buffer, buffer_size, &bytes_read, NULL);
if (result) DoSomethingWithTheData(buffer, bytes_read);
else Fail();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是 ReadFile() 函数等待数据,然后读取数据。有没有一种方法可以判断是否有新数据,而无需实际等待新数据,如下所示:
void GetDataThread()
{
while(notDone)
{
BOOL result = IsThereNewData (pipe_handle);
if (result) {
result = ReadFile (pipe_handle, buffer, buffer_size, &bytes_read, NULL);
if (result) DoSomethingWithTheData(buffer, bytes_read);
else Fail();
}
DoSomethingInterestingInsteadOfHangingTheThreadSinceWeHaveLimitedNumberOfThreads();
}
}
Run Code Online (Sandbox Code Playgroud) stderr当重定向之后会发生什么stdout,反之亦然?
例如:
someCommand > log.txt 2>&1
与
someCommand 2>&1 > log.txt
Ubuntu下bash运行:
我有一个源可以生成一些输出,但不是立即生成。让我们假设它是第一个在套接字上侦听的 netcat:netcat -l 12345。
我想将其通过管道传输到传出的 netcat(通过 TCP 连接),例如netcat -l 12345 | netcat localhost 54321。但棘手的一点是,我知道当我运行命令时,本地主机 54321 上没有任何东西监听传入连接,但我知道当第一个实际字符通过管道到达时将会有一个监听。
所以我的问题是:有没有办法:
提前致谢!
编辑:实际上,源比 netcat 更复杂,即它是一个通过各种流修改进行管道传输的监听 netcat。
对于一个项目,我应该将命令的输出通过管道传输到我的 C 程序(称为执行),然后该程序将执行该命令。
\n\n例如,运行这个:\n echo ls -lR /usr | ./execute,将获取输出 ( ls -lR /usr) 并将其传递到我的 C 程序中,然后该程序将执行ls -lR /usr。
根据指示,我应该用来execvpe()实际执行程序,但是我找不到任何有意义的文档,也无法在不出现这些错误的情况下让它工作:
execute.c: In function \xe2\x80\x98main\xe2\x80\x99:\nexecute.c:98: warning: implicit declaration of function \xe2\x80\x98getenv\xe2\x80\x99\nexecute.c:98: warning: assignment makes pointer from integer without a cast\nexecute.c:106: warning: implicit declaration of function \xe2\x80\x98execvpe\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n\n我的教授说我必须#include <unistd.h>解析<stdio.h>程序的输入(我也这样做了),然后执行以下操作:
int main(void) {\n char *path;\n path = getenv("PATH");\n char *envp[] = {path, NULL};\n // the initialized array below …Run Code Online (Sandbox Code Playgroud) 所以我想打开一个目录中的每个文件(这个目录中有4个纯文本文档)。并执行诸如查找特定单词及其在每个文件中出现的次数之类的操作。
这是我使用的代码,但是我得到了没有这样的文件或目录的错误,但是我在打印路径时,它清楚地显示了每个文件的名称。
import re
import os
path = 'C:\\Python27\\projects\\Alabama\\New folder'
pattern = re.compile(r"\bmay not\b",re.IGNORECASE)
pattern1 = re.compile(r"\bshall\b",re.IGNORECASE)
pattern2 = re.compile(r"\bmust\b",re.IGNORECASE)
pattern3 = re.compile(r"\bprohibited\b",re.IGNORECASE)
pattern4 = re.compile(r"\brequired\b",re.IGNORECASE)
for filenames in os.listdir(path):
with open(filenames) as myfile:
total = 0
total1 = 0
total2 = 0
total3 = 0
total4 = 0
for line in myfile:
m = re.findall(pattern, line)
m1 = re.findall(pattern1, line)
m2 = re.findall(pattern2, line)
m3 = re.findall(pattern3, line)
m4 = re.findall(pattern4, line)
total += len(m)
total1 += len(m1)
total2 …Run Code Online (Sandbox Code Playgroud) 我正在使用curl 将一些urlencoded 内容发布到URL,并且我希望curl 命令的内容来自管道。基本上...
... | curl -s --data-urlencode '{\"text\":\"$PIPE_RESULT\"}' http://...
我认为 $0 可能有效,但我收到 invalid_payload 错误,其简单文本如下:
echo "http://www.example.com" | curl -s --data-urlencode '{"text\":\"$0\"}' https:/...
我有一个柯里化函数,我在组合中使用它,它有效:
const getClubs = R.filter(R.propEq('suit', 'CLUBS'))
Run Code Online (Sandbox Code Playgroud)
这是接收一系列纸牌对象并按它们的花色过滤它们。
但是当我尝试取消嵌套这个函数调用并将其变成管道时:
const getClubs = R.pipe(R.filter, R.propEq('suit', 'CLUBS'))
Run Code Online (Sandbox Code Playgroud)
...这不再起作用,我什至没有收到任何错误。我的管道或过滤器功能做错了什么?
在第 8 行和第 9 行之间切换以查看我上面描述的问题
我试图找到这个问题的解决方案,到目前为止我已经想出了这个允许 HTML 的管道
import { PipeTransform, Pipe } from "@angular/core";
@Pipe({
name: "toHtml"
})
export class ToHtmlPipe implements PipeTransform {
transform(content) {
return `<b>${content}</b>`;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个链接,它在悬停时显示数据工具提示:
<a *ngIf="day.Info.Info" data-toggle="tooltip" [title]="day.Info.Info | toHtml" placement="right"><i style="color:black" class="glyphicon glyphicon-comment"></i></a>
Run Code Online (Sandbox Code Playgroud)
然而,这是我得到的结果:
所以管道不起作用,据我所知,我无法使用[innerHtml]="",因为它只是更改了字符串的链接,而不是图标。
在此先感谢您的帮助
我需要格式化一个数字以将点数放入数千个,我需要使用角度 2 中的管道对其进行格式化。Ejem:数字是 1983839,结果必须是 1.983.839 知道吗?
{{amount | number}}
Run Code Online (Sandbox Code Playgroud) 我有一个df包含列A和的 data.frame B:
df <- data.frame(A = 1:5, B = 11:15)
Run Code Online (Sandbox Code Playgroud)
还有另一个 data.frame ,df2我通过各种计算构建它,最终具有通用列名称 X1 和 X2,我无法直接控制它们(因为它在某一点作为矩阵传递)。所以它最终会变成这样:
mtrx <- matrix(1:10, ncol = 2)
mtrx %>% data.frame()
Run Code Online (Sandbox Code Playgroud)
我想将 df2 中的列重命名为与 df 相同。当然,我可以在通过简单的分配完成构建 df2 后执行此操作:
names(df2)<-names(df)
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 有没有办法直接在管道内执行此操作?我似乎无法使用 dplyr::rename,因为它们必须采用 newname=oldname 的形式,而且我似乎无法对其进行矢量化。调用data.frame本身也是如此 - 据我所知,我不能只给它一个列名向量。我还缺少另一个选择吗?我希望是这样的
mtrx %>% data.frame() %>% rename(names(df))
Run Code Online (Sandbox Code Playgroud)
但这不起作用 - 给出错误Error: All arguments must be named。
干杯!