我正在testingpipe道,并打了一个小路障。 我想能够模拟通过由popen打开的文件指针按右箭头键。 文件指针在不同的terminal上打开一个显示程序,就像投影仪一样。 我想发送一个信号来推进下一个图像(右箭头键)。 我怎么去发送这个信号? 我意识到这将是特定于我的电脑(BOIS /键盘设置),但我不希望这是便携式无论如何。 从我的试验看来,通过fprintf发送的所有内容都被解释为可读的字符,而不是特殊的编码。 幻灯片程序不能更改,所以这不是一个选项。 任何方向将不胜感激。
所以我在Python中有点新鲜感。 我正在做一个login表单,将你redirect到一个运行在linux服务器上的python脚本来authentication用户。 我一次使用多个命令来查看用户是否在数据库中。 该命令是echo“$ password”| login-p -h 192.0 .. $ user> / dev / null 2>&1当我echo $? 它应该返回一个0,如果它在数据库中,或者1,如果它不是。 在python脚本中,我有这样的: import cgi,shlex,subprocess form = cgi.FieldStorage() params={} for key in form.keys(): params[key]= form[key].value user_name_variable=params['id'] password_variable=params['pwd'] command1="login -p -h 192.0. "+user_name_variable+" >/dev/null 2>&1" command2="echo "+password_variable command3="'echo $?'" p1=subprocess.Popen(shlex.split(command2),shell=True,stdout=subprocess.PIPE) p2=subprocess.Popen(shlex.split(command1),shell=True,stdin=p1.stdout, stdout=subprocess.PIPE) p3=subprocess.Popen(shlex.split(command3),shell=True, stdin=p2.stdout, stdout=subprocess.PIPE) p1.stdout.close() p2.stdout.close() out, err= p3.communicate()[0] […]
我在.bashrc中添加了mytool的path,我可以从bash shell的任何path运行mytool –help 。 但是当我运行下面的代码片段时,我得到: 文件“/usr/lib/python2.7/subprocess.py”,行1249,在_execute_child中引发child_exception OSError:[Errno 2]没有这样的文件或目录 import subprocess command_array = ['mytool', '–help'] p = subprocess.Popen(command_array, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, ) for line in iter(p.stdout.readline, b''): print(line) p.stdout.close() 我该如何解决这个问题? 编辑:当我从terminal(bash)运行python文件,它工作正常。 但是当我从PyCharm(debugging器)或其他shell运行它是给出上述错误。 如何改变我的脚本,使其在bash中运行脚本时使用“mytool”? 我需要在.bashrc中添加环境
我正在C中工作,当用以下参数调用popen时遇到问题: void exampleFunction(void) { . . . FILE* in = popen("alias -p", "r"); . . . } 当我用这种方式给popen打电话时,我收到以下消息: alias: -p not found 我不知道什么是错的,因为当我打电话给popen以下的论点时: FILE* in = popen("ls -i", "r"); 没有问题,我使用相同的语法。 也许有人意识到真正的错误。
据python文档http://docs.python.org/library/subprocess.html ,build议用Popen类replaceos.popen,现在我有以下命令: import os c = "openssl dgst -sha1 -sign /foo/1 /bar/1 | openssl enc -base64 -A" my_value = os.popen(c).read() 我明白,Popen作为一个string参数列表的命令,当我尝试传递pipe道(“|”)时,如何打破,我也明白这是由于“|” 在bash中有一个特殊的含义,怎么也不知道如何解决这个问题。 另一个问题是Popen实例没有read方法,所以我不知道如何看到输出。 我正在使用Django框架,所以如果在框架中也有一个函数可以帮助也是一个选项。
我需要传递一个stringvariables到一个popen命令,我为了对一段encryption数据进行描述。 我需要使用的代码段是: char a[]="Encrypted data"; popen("openssl aes-256-cbc -d -a -salt <a-which is the data i have to pass here>","r"); 我应该怎么做才能将这个variables传递给命令。 我试着用: popen("openssl aes-256-cbc -d -a -salt %s",a,"r"); 但编译显示错误,popen传递了太多的论据。 请帮忙。 提前致谢。 操作平台:Linux
所以,如果我在gcc stdio.h中使用popen(),我可以将一个父级的stdout传递给它的孩子的stdin,或者我可以将孩子的stdout传给父级的stdin。 我想同时做两个。 有没有办法做到这一点使用popen,或者我需要使用较低级别的工具(如共享内存)这个工作? 注意:它在FreeBSD中看起来像popen可以用“r +”读写。 我不明白孩子的标准输出是如何通过父母和父母的标准输出。 无论如何,这可能会对我有用,但在Linux中似乎并不是这样。 如果我误解了这一点,那会回答我的问题。 这里是我得到这个笔记的链接: https : //www.freebsd.org/cgi/man.cgi?query=popen&sektion=3 注2:我更喜欢按照优先顺序,在几乎所有的Linux发行版,FreeBSD和OSX上都可移植的解决scheme。 话虽如此,我很乐意至less在Ubuntu 14.04中工作。
我可以做这个命令: ACTIVE_MGMT_1=`ssh -n ${MGMT_IP_1} ". .bash_profile; xms sho proc TRAF.*" 2>/dev/null |egrep " A " |awk '/TRAF/{print $1}' |cut -d "." -f2`; 运行python? 我正在试着做: active_mgmgt_1 = os.popen("""ssh -n MGMT_IP_1 ". .bash_profile; xms sho proc TRAF.*" 2>/dev/null |egrep " A " |awk '/TRAF/{print $1}' |cut -d "." -f2""") SITE_NAME = site_name.read().replace('\n', '') 但它不起作用。
我们可以通过shell命令行检测是否有僵尸进程 ps ef -o pid,stat | grep <pid> | grep Z 为了在我们的C / C ++程序中获得这个信息,我们使用了popen() ,但是我们想避免使用popen() 。 有没有办法获得相同的结果,而不会产生额外的进程? 我们正在使用Linux 2.6.32-279.5.2.el6.x86_64。
我正在运行的Linux,我试图做到以下几点: 在当前目录下运行ls(使用popen) 将结果输出到缓冲区(使用来自pipe道描述符的fread) closurespipe道(使用pclose)。 一切工作正常(缓冲区正确填写ls的结果),但是当我检查pclose()结果它返回-1和errno设置为10(没有subprocess)。 不知道为什么发生这种情况,但我不能忽视它(除非有合理的解释,为什么发生这种情况)。 我的代码: FILE * lsoutput = NULL; lsoutput = popen("ls -ltr", "r"); if (readFromPipeOrFile(lsOutput, pSendBuf, pSendActualSize) == -1) { printf("readFromPipeOrFile failed."); pclose(lsOutput); safeFree(pSendBuf); return -1; } if (pclose(lsOutput) == -1) // No idea why it returns -1 but it does… { printf("pclose failed"); printf("errno: %d\n", errno); printf("strerror: '%s'", strerror(errno)); return […]