Re: how to use subprocess.Popen execute "find" in windows

2008-05-08 Thread clyfish
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

2008-05-08 Thread Gabriel Genellina
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

2008-05-07 Thread clyfish
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

2008-05-07 Thread clyfish
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

2008-05-06 Thread alito
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

2008-05-06 Thread Justin Ezequiel
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

2008-05-06 Thread BlueBird
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

2008-05-06 Thread Diez B. Roggisch
[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

2008-05-06 Thread clyfish
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