小编Xit*_*tac的帖子

管道输出到bc计算器

精简版:

我正在尝试使用管道在c中使用这样的东西:

echo 3+5 | bc
Run Code Online (Sandbox Code Playgroud)

更长的版本:

按照http://beej.us/guide/bgipc/output/html/multipage/pipes.html上有关管道的简单说明,我尝试在该页面上创建类似于上一个示例的内容.确切地说,我尝试使用2个过程在c中创建管道.子进程将其输出发送到父级,父级使用该输出进行计算,使用bc计算器.我基本上在先前链接的页面上复制了这个例子,对代码进行了一些简单的调整,但它没有用.

这是我的代码:

#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

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

    if (!fork()) {
        close(1);       /* close normal stdout */
        dup(pfds[1]);   /* make stdout same as pfds[1] */
        close(pfds[0]); /* we don't need this */
        printf("3+3");
        exit(0);
    } else {
        close(0);       /* close normal stdin */
        dup(pfds[0]);   /* make stdin same as pfds[0] */
        close(pfds[1]); /* we don't need this */
        execlp("bc", "bc", NULL); …
Run Code Online (Sandbox Code Playgroud)

c bash pipe bc

7
推荐指数
1
解决办法
5481
查看次数

Pyparsing - 一组中的零个或一个

我如何从一组令牌中获得零个或仅一个令牌?它们可以按任何顺序排列。说这是我的代码:

def parseFunc(self, string):
    firstToken = CaselessKeyword("KeyWordOne")
    secondToken = CaselessKeyword("KeyWordTwo")
    thirdToken = CaselessKeyword("KeyWordThree")

    stmt = ZeroOrMore(firstToken | secondToken | thirdToken)
    return stmt.parseString(string)
Run Code Online (Sandbox Code Playgroud)

ZeroOrMore 存在一个问题,因为每个标记都可以显示多次。对于可选,它们必须严格按照列出的顺序排列。

这是我当前的解决方案:

stmt = ZeroOrMore(firstToken | secondToken | thirdToken)
tokens = stmt.parseString(string)
s = set()
for x in tokens:
    if x[0] in s: return "Error: redundant options"
    s.add(x[0])

return tokens
Run Code Online (Sandbox Code Playgroud)

python pyparsing

3
推荐指数
1
解决办法
2473
查看次数

标签 统计

bash ×1

bc ×1

c ×1

pipe ×1

pyparsing ×1

python ×1