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

2008-05-09 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 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-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-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 windows.h
#include stdio.h

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

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

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


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 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