网站建设资讯

NEWS

网站建设资讯

关于python管道函数实现的信息

python如何实现管道编程

管道调用子程序

创新互联专业为企业提供武平网站建设、武平做网站、武平网站设计、武平网站制作等企业网站建设、网页设计与制作、武平企业网站模板建站服务,十载武平做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

我们想在程序中使用一个子程序,但是需要动态的传递参数(这里说的动态,是指根据上次子程序输入的结果来决定这次输入什么),怎么办呢,不用慌,有subprocess!

下文我先介绍一个例子代码,以及他的输出结果!

1.#!/usr/bin/python2.from subprocess import *3.# Subprocess management,可以做很多子进程的文件,我们要引入这个文件4.p = Popen(["cat", "-n"], bufsize=1024,stdin=PIPE, 5.stdout=PIPE, close_fds=True)6.# 打开程序第一个参数是一个列表(程序名称,参数)7.# 第二个参数是缓冲区大小8.# stdin,stdout是设置是否打开这些管道,如果他的值是subprocess.PIPE的话,9.# 就会打开,同stdin一样的还有stderr10.# close_fds设置为true(unix-only)所有的文件描述符除了(0,1,2)在子程序执行前都会关闭11.(fin, fout) = (p.stdin, p.stdout)12.for i in range(10): # 你会懂的^_^ 13.fin.write("line" + str(i)) 14.fin.write('\n') 15.fin.flush() 16.print fout.readline()

他的输出结果是:1.line02.line13.line24.line35.line46.line57.line68.line79.line810.line9

python编程中 os.mkfifo()和os.mknod()函数具体用法?最好有例子,里面参数具体怎么配置就能创建管道或节

mkfifo函数使用

[code]mkfifo(建立实名管道)

相关函数

pipe,popen,open,umask

表头文件

#include

#include

定义函数

int mkfifo(const char * pathname,mode_t mode);

函数说明

mkfifo() 会依参数pathname建立特殊的FIFO文件,该文件必须不存在,而参数mode为该文件的权限(mode%~umask),因此 umask值也会影响到FIFO文件的权限。Mkfifo()建立的FIFO文件其他进程都可以用读写一般文件的方式存取。当使用open()来打开 FIFO文件时,O_NONBLOCK旗标会有影响

1、当使用O_NONBLOCK 旗标时,打开FIFO 文件来读取的操作会立刻返回,但是若还没有其他进程打开FIFO 文件来读取,则写入的操作会返回ENXIO 错误代码。

2、没有使用O_NONBLOCK 旗标时,打开FIFO 来读取的操作会等到其他进程打开FIFO文件来写入才正常返回。同样地,打开FIFO文件来写入的操作会等到其他进程打开FIFO 文件来读取后才正常返回。

返回值

若成功则返回0,否则返回-1,错误原因存于errno中。

错误代码

EACCESS 参数pathname所指定的目录路径无可执行的权限

EEXIST 参数pathname所指定的文件已存在。

ENAMETOOLONG 参数pathname的路径名称太长。

ENOENT 参数pathname包含的目录不存在

ENOSPC 文件系统的剩余空间不足

ENOTDIR 参数pathname路径中的目录存在但却非真正的目录。

EROFS 参数pathname指定的文件存在于只读文件系统内。

示例1:

#include

#include

#include

#include

int main(void)

{

char buf[80];

int fd;

unlink( "zieckey_fifo" );

mkfifo( "zieckey_fifo", 0777 );

if ( fork() 0 )

{

char s[] = "Hello!\n";

fd = open( "zieckey_fifo", O_WRONLY );

write( fd, s, sizeof(s) );

//close( fd );

}

else

{

fd = open( "zieckey_fifo", O_RDONLY );

read( fd, buf, sizeof(buf) );

printf("The message from the pipe is:%s\n", buf );

//close( fd );

}

return 0;

}

执行

hello!

示例2:

#include

#include

#include

#include

#include

int main( int argc, char **argv )

{

mode_t mode = 0666;

if ( argc !=2 )

{

printf( "Usage:[%s] fifo_filename\n", argv[0] );

return -1;

}

if (mkfifo( argv[1], mode)0 )

{

perror( "mkfifo");

return -1;

}

return 0;

} [/code]

python管道问题

管道有两端,读端和写端。创建管道,然后从父进程fork出子进程,

父进程和子进程拥有共同的读写文件描述符,可以实现子进程写文件,父进程读文件的操作。


名称栏目:关于python管道函数实现的信息
分享地址:http://njwzjz.com/article/dodejhc.html