Re: how to use subprocess.Popen execute "find" in windows
On 5月8日, 下午5时39分, "Gabriel Genellina" <[EMAIL PROTECTED]> wrote: > En Wed, 07 May 2008 23:29:58 -0300, <[EMAIL PROTECTED]> escribió: > > > > > On 5月7日, 上午9时45分, Justin Ezequiel <[EMAIL PROTECTED]> > > wrote: > >> On May 6, 5:19 pm, [EMAIL PROTECTED] wrote: > > >> > p1 = Popen(['netstat', '-an'], stdout = PIPE) > >> > p2 = Popen(['find', '"445"'], stdin = p1.stdout, stdout = PIPE) > >> > print p2.stdout.read() > > >> > It doesn't work. > >> > Because subprocess.Popen execute "find" like this. > > >> > C:\>find \"445\" > > >> > It adds a '\' before each '"'. > >> > How to remove the '\'? > >> > Thank you. > > >> cannot help with the backslashes but try findstr instead of find > > > Thank you. > > findstr doesn't need quotes, so it works. > > Build the command line yourself -instead of using a list of arguments-. Popen > doesn't play with the quotes in that case: > > p1 = Popen(['netstat', '-an'], stdout = PIPE) # using list > p2 = Popen('find "445"', stdin = p1.stdout, stdout = PIPE) # using str > print p2.communicate()[0] > > -- > Gabriel Genellina Thanks very much. You solved my problem. -- http://mail.python.org/mailman/listinfo/python-list
Re: how to use subprocess.Popen execute "find" in windows
En Wed, 07 May 2008 23:29:58 -0300, <[EMAIL PROTECTED]> escribió: > On 5月7日, 上午9时45分, Justin Ezequiel <[EMAIL PROTECTED]> > wrote: >> On May 6, 5:19 pm, [EMAIL PROTECTED] wrote: >> >> > p1 = Popen(['netstat', '-an'], stdout = PIPE) >> > p2 = Popen(['find', '"445"'], stdin = p1.stdout, stdout = PIPE) >> > print p2.stdout.read() >> >> > It doesn't work. >> > Because subprocess.Popen execute "find" like this. >> >> > C:\>find \"445\" >> >> > It adds a '\' before each '"'. >> > How to remove the '\'? >> > Thank you. >> >> cannot help with the backslashes but try findstr instead of find > > Thank you. > findstr doesn't need quotes, so it works. Build the command line yourself -instead of using a list of arguments-. Popen doesn't play with the quotes in that case: p1 = Popen(['netstat', '-an'], stdout = PIPE) # using list p2 = Popen('find "445"', stdin = p1.stdout, stdout = PIPE) # using str print p2.communicate()[0] -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: how to use subprocess.Popen execute "find" in windows
On 5月7日, 下午2时41分, alito <[EMAIL PROTECTED]> wrote: > On May 6, 7:19 pm, [EMAIL PROTECTED] wrote: > > > In cmd, I can use find like this. > > > C:\>netstat -an | find "445" > > TCP0.0.0.0:4450.0.0.0:0 LISTENING > > UDP0.0.0.0:445*:* > > > C:\> > > > And os.system is OK.>>> import os > > >>> os.system('netstat -an | find "445"') > > > TCP0.0.0.0:4450.0.0.0:0 LISTENING > > UDP0.0.0.0:445*:* > > 0 > > > But I don't know how to use subprocess.Popen to do this. > > > from subprocess import Popen, PIPE > > > p1 = Popen(['netstat', '-an'], stdout = PIPE) > > p2 = Popen(['find', '"445"'], stdin = p1.stdout, stdout = PIPE) > > print p2.stdout.read() > > Get rid of the extra quotes. ie: > p2 = Popen(['find', '445'], stdin = p1.stdout, stdout = PIPE) > > The quotes on the command line and on the os.system call are consumed > by the shell. The program doesn't see them. You must be a linux user:) I guess, in windows, the quotes are consumed by the c runtime library. Mayby the "find" in windows doesn't use the argc/argv but the windows API GetCommandLine(). I wrote a c program to prove it. #include #include int main(int argc, char **argv) { int i; printf("%s\n", GetCommandLine()); for (i = 0; i < argc; ++i) printf("%d: %s\n", i, argv[i]); return 0; } The output is: C:\>test 1 2 "3" test 1 2 "3" 0: test 1: 1 2: 2 3: 3 C:\> Notice that, GetCommandLine() does not consume the quotes, but the (char **argv) does. -- http://mail.python.org/mailman/listinfo/python-list
Re: how to use subprocess.Popen execute "find" in windows
On 5月7日, 上午9时45分, Justin Ezequiel <[EMAIL PROTECTED]> wrote: > On May 6, 5:19 pm, [EMAIL PROTECTED] wrote: > > > > > In cmd, I can use find like this. > > > C:\>netstat -an | find "445" > > TCP0.0.0.0:4450.0.0.0:0 LISTENING > > UDP0.0.0.0:445*:* > > > C:\> > > > And os.system is OK.>>> import os > > >>> os.system('netstat -an | find "445"') > > > TCP0.0.0.0:4450.0.0.0:0 LISTENING > > UDP0.0.0.0:445*:* > > 0 > > > But I don't know how to use subprocess.Popen to do this. > > > from subprocess import Popen, PIPE > > > p1 = Popen(['netstat', '-an'], stdout = PIPE) > > p2 = Popen(['find', '"445"'], stdin = p1.stdout, stdout = PIPE) > > print p2.stdout.read() > > > It doesn't work. > > Because subprocess.Popen execute "find" like this. > > > C:\>find \"445\" > > 拒绝访问 - \ > > > C:\> > > > It adds a '\' before each '"'. > > How to remove the '\'? > > Thank you. > > cannot help with the backslashes but try findstr instead of find Thank you. findstr doesn't need quotes, so it works. -- http://mail.python.org/mailman/listinfo/python-list
Re: how to use subprocess.Popen execute "find" in windows
On May 6, 7:19 pm, [EMAIL PROTECTED] wrote: > In cmd, I can use find like this. > > C:\>netstat -an | find "445" > TCP 0.0.0.0:445 0.0.0.0:0 LISTENING > UDP 0.0.0.0:445 *:* > > C:\> > > And os.system is OK.>>> import os > >>> os.system('netstat -an | find "445"') > > TCP 0.0.0.0:445 0.0.0.0:0 LISTENING > UDP 0.0.0.0:445 *:* > 0 > > > > But I don't know how to use subprocess.Popen to do this. > > from subprocess import Popen, PIPE > > p1 = Popen(['netstat', '-an'], stdout = PIPE) > p2 = Popen(['find', '"445"'], stdin = p1.stdout, stdout = PIPE) > print p2.stdout.read() > Get rid of the extra quotes. ie: p2 = Popen(['find', '445'], stdin = p1.stdout, stdout = PIPE) The quotes on the command line and on the os.system call are consumed by the shell. The program doesn't see them. -- http://mail.python.org/mailman/listinfo/python-list
Re: how to use subprocess.Popen execute "find" in windows
On May 6, 5:19 pm, [EMAIL PROTECTED] wrote: > In cmd, I can use find like this. > > C:\>netstat -an | find "445" > TCP0.0.0.0:4450.0.0.0:0 LISTENING > UDP0.0.0.0:445*:* > > C:\> > > And os.system is OK.>>> import os > >>> os.system('netstat -an | find "445"') > > TCP0.0.0.0:4450.0.0.0:0 LISTENING > UDP0.0.0.0:445*:* > 0 > > > > But I don't know how to use subprocess.Popen to do this. > > from subprocess import Popen, PIPE > > p1 = Popen(['netstat', '-an'], stdout = PIPE) > p2 = Popen(['find', '"445"'], stdin = p1.stdout, stdout = PIPE) > print p2.stdout.read() > > It doesn't work. > Because subprocess.Popen execute "find" like this. > > C:\>find \"445\" > 拒绝访问 - \ > > C:\> > > It adds a '\' before each '"'. > How to remove the '\'? > Thank you. cannot help with the backslashes but try findstr instead of find -- http://mail.python.org/mailman/listinfo/python-list
Re: how to use subprocess.Popen execute "find" in windows
On May 6, 11:19 am, [EMAIL PROTECTED] wrote: > In cmd, I can use find like this. > > C:\>netstat -an | find "445" > TCP0.0.0.0:4450.0.0.0:0 LISTENING > UDP0.0.0.0:445*:* > > C:\> > > And os.system is OK.>>> import os > >>> os.system('netstat -an | find "445"') > > TCP0.0.0.0:4450.0.0.0:0 LISTENING > UDP0.0.0.0:445*:* > 0 > > > > But I don't know how to use subprocess.Popen to do this. > > from subprocess import Popen, PIPE > > p1 = Popen(['netstat', '-an'], stdout = PIPE) > p2 = Popen(['find', '"445"'], stdin = p1.stdout, stdout = PIPE) > print p2.stdout.read() > I would say that, according to documentation, the following should work: print p2.communicate()[0] Philippe -- http://mail.python.org/mailman/listinfo/python-list
Re: how to use subprocess.Popen execute "find" in windows
[EMAIL PROTECTED] wrote: > In cmd, I can use find like this. > > C:\>netstat -an | find "445" > TCP0.0.0.0:4450.0.0.0:0 LISTENING > UDP0.0.0.0:445*:* > > C:\> > > And os.system is OK. import os os.system('netstat -an | find "445"') > TCP0.0.0.0:4450.0.0.0:0 LISTENING > UDP0.0.0.0:445*:* > 0 > > But I don't know how to use subprocess.Popen to do this. While there certainly are valid usecases for piping with subprocess in Python - this ain't one I'd say. Just read the output of netstat yourself, and filter for lines that contain the desired pattern. Diez -- http://mail.python.org/mailman/listinfo/python-list
how to use subprocess.Popen execute "find" in windows
In cmd, I can use find like this. C:\>netstat -an | find "445" TCP0.0.0.0:4450.0.0.0:0 LISTENING UDP0.0.0.0:445*:* C:\> And os.system is OK. >>> import os >>> os.system('netstat -an | find "445"') TCP0.0.0.0:4450.0.0.0:0 LISTENING UDP0.0.0.0:445*:* 0 >>> But I don't know how to use subprocess.Popen to do this. from subprocess import Popen, PIPE p1 = Popen(['netstat', '-an'], stdout = PIPE) p2 = Popen(['find', '"445"'], stdin = p1.stdout, stdout = PIPE) print p2.stdout.read() It doesn't work. Because subprocess.Popen execute "find" like this. C:\>find \"445\" 拒绝访问 - \ C:\> It adds a '\' before each '"'. How to remove the '\'? Thank you. -- http://mail.python.org/mailman/listinfo/python-list