Re: for-loop on cmd-line

Discussion in 'Python' started by Chris Angelico, Oct 11, 2012.

  1. On Thu, Oct 11, 2012 at 11:16 PM, D'Arcy J.M. Cain <> wrote:
    > On Thu, 11 Oct 2012 13:24:22 +0200
    > Gisle Vanem <> wrote:
    >
    >> Hello list. I'm a newbie when it comes to Python.
    >>
    >> I'm trying to turn this:
    >>
    >> def print_sys_path():
    >> i = 0
    >> for p in sys.path:
    >> print ('sys.path[%2d]: %s' % (i, p))
    >> i += 1
    >>
    >> into a one-line python command (in a .bat file):

    >
    > Is "one liner" an actual requirement or is the requirement to run it
    > from the command line?
    >
    > python -c "
    > import sys
    > i = 0
    > for p in sys.path:
    > print('sys.path[%2d]: %s' % (i, p))
    > i+=1
    > "
    >
    > I don't know if this works on Windows or not.


    It doesn't, I just tested it. Windows batch is appallingly crude
    compared to a modern Unix shell; you may be able to find a way to get
    around this, but the easiest solution for most batch files is going to
    be an actual Python script file. You may be able to overlay your batch
    and Python scripts with a trick like this:

    rem = '''
    @echo off
    echo This is batch
    \python32\python %0
    echo All done
    exit /b
    rem '''
    import sys
    print("This is Python")
    for i,p in enumerate(sys.path):
    print('sys.path[%2d]: %s' % (i, p))
    print("Python done")

    You'll have a variable in Python called 'rem' which contains all your
    batch code :) It exploits the fact that 'rem' makes a one-line
    comment, but the triple quotes go across multiple lines. (The "exit
    /b" should exit the batch script without closing cmd.exe - this is yet
    another weird WEIRD wart in Windows batch. I'm pretty sure neither DOS
    nor OS/2 batch required that parameter.)

    ChrisA
    Chris Angelico, Oct 11, 2012
    #1
    1. Advertising

  2. On Thursday, 11 October 2012 18:44:44 UTC+5:30, Chris Angelico wrote:
    > On Thu, Oct 11, 2012 at 11:16 PM, D'Arcy J.M. Cain <> wrote:
    >
    > > On Thu, 11 Oct 2012 13:24:22 +0200

    >
    > > Gisle Vanem <> wrote:

    >
    > >

    >
    > >> Hello list. I'm a newbie when it comes to Python.

    >
    > >>

    >
    > >> I'm trying to turn this:

    >
    > >>

    >
    > >> def print_sys_path():

    >
    > >> i = 0

    >
    > >> for p in sys.path:

    >
    > >> print ('sys.path[%2d]: %s' % (i, p))

    >
    > >> i += 1

    >
    > >>

    >
    > >> into a one-line python command (in a .bat file):

    >
    > >

    >
    > > Is "one liner" an actual requirement or is the requirement to run it

    >
    > > from the command line?

    >
    > >

    >
    > > python -c "

    >
    > > import sys

    >
    > > i = 0

    >
    > > for p in sys.path:

    >
    > > print('sys.path[%2d]: %s' % (i, p))

    >
    > > i+=1

    >
    > > "

    >
    > >

    >
    > > I don't know if this works on Windows or not.

    >
    >
    >
    > It doesn't, I just tested it. Windows batch is appallingly crude
    >
    > compared to a modern Unix shell; you may be able to find a way to get
    >
    > around this, but the easiest solution for most batch files is going to
    >
    > be an actual Python script file. You may be able to overlay your batch
    >
    > and Python scripts with a trick like this:
    >
    >
    >
    > rem = '''
    >
    > @echo off
    >
    > echo This is batch
    >
    > \python32\python %0
    >
    > echo All done
    >
    > exit /b
    >
    > rem '''
    >
    > import sys
    >
    > print("This is Python")
    >
    > for i,p in enumerate(sys.path):
    >
    > print('sys.path[%2d]: %s' % (i, p))
    >
    > print("Python done")
    >
    >
    >
    > You'll have a variable in Python called 'rem' which contains all your
    >
    > batch code :) It exploits the fact that 'rem' makes a one-line
    >
    > comment, but the triple quotes go across multiple lines. (The "exit
    >
    > /b" should exit the batch script without closing cmd.exe - this is yet
    >
    > another weird WEIRD wart in Windows batch. I'm pretty sure neither DOS
    >
    > nor OS/2 batch required that parameter.)
    >
    >
    >
    > ChrisA


    What about the "Power" in PowerShell?
    Ramchandra Apte, Oct 11, 2012
    #2
    1. Advertising

  3. On Thursday, 11 October 2012 18:44:44 UTC+5:30, Chris Angelico wrote:
    > On Thu, Oct 11, 2012 at 11:16 PM, D'Arcy J.M. Cain <> wrote:
    >
    > > On Thu, 11 Oct 2012 13:24:22 +0200

    >
    > > Gisle Vanem <> wrote:

    >
    > >

    >
    > >> Hello list. I'm a newbie when it comes to Python.

    >
    > >>

    >
    > >> I'm trying to turn this:

    >
    > >>

    >
    > >> def print_sys_path():

    >
    > >> i = 0

    >
    > >> for p in sys.path:

    >
    > >> print ('sys.path[%2d]: %s' % (i, p))

    >
    > >> i += 1

    >
    > >>

    >
    > >> into a one-line python command (in a .bat file):

    >
    > >

    >
    > > Is "one liner" an actual requirement or is the requirement to run it

    >
    > > from the command line?

    >
    > >

    >
    > > python -c "

    >
    > > import sys

    >
    > > i = 0

    >
    > > for p in sys.path:

    >
    > > print('sys.path[%2d]: %s' % (i, p))

    >
    > > i+=1

    >
    > > "

    >
    > >

    >
    > > I don't know if this works on Windows or not.

    >
    >
    >
    > It doesn't, I just tested it. Windows batch is appallingly crude
    >
    > compared to a modern Unix shell; you may be able to find a way to get
    >
    > around this, but the easiest solution for most batch files is going to
    >
    > be an actual Python script file. You may be able to overlay your batch
    >
    > and Python scripts with a trick like this:
    >
    >
    >
    > rem = '''
    >
    > @echo off
    >
    > echo This is batch
    >
    > \python32\python %0
    >
    > echo All done
    >
    > exit /b
    >
    > rem '''
    >
    > import sys
    >
    > print("This is Python")
    >
    > for i,p in enumerate(sys.path):
    >
    > print('sys.path[%2d]: %s' % (i, p))
    >
    > print("Python done")
    >
    >
    >
    > You'll have a variable in Python called 'rem' which contains all your
    >
    > batch code :) It exploits the fact that 'rem' makes a one-line
    >
    > comment, but the triple quotes go across multiple lines. (The "exit
    >
    > /b" should exit the batch script without closing cmd.exe - this is yet
    >
    > another weird WEIRD wart in Windows batch. I'm pretty sure neither DOS
    >
    > nor OS/2 batch required that parameter.)
    >
    >
    >
    > ChrisA


    What about the "Power" in PowerShell?
    Ramchandra Apte, Oct 11, 2012
    #3
  4. On Fri, Oct 12, 2012 at 12:16 AM, Ramchandra Apte
    <> wrote:
    > What about the "Power" in PowerShell?


    What about it? Are you suggesting that the OP use it? Are you saying
    that Windows batch already includes it? You quoted my entire post
    (double-spaced), but that context adds nothing to your statement; it
    still stands alone as a complete non sequitur.

    And you're posting to both c.l.p and p-l...

    ChrisA
    Chris Angelico, Oct 11, 2012
    #4
  5. Chris Angelico

    Guest

    Le jeudi 11 octobre 2012 15:16:33 UTC+2, Ramchandra Apte a écrit :

    PS C:\> $cmd="import sys;"
    PS C:\> $cmd+="print('\n'.join(sys.path))"
    PS C:\> $cmd
    import sys;print('\n'.join(sys.path))
    PS C:\> c:\python32\python -c $cmd

    C:\Windows\system32\python32.zip
    c:\python32\DLLs
    c:\python32\lib
    c:\python32
    c:\python32\lib\site-packages
    PS C:\>

    Can probably be in a .cmd file.

    jmf
    , Oct 11, 2012
    #5
  6. Chris Angelico

    Guest

    Le jeudi 11 octobre 2012 15:16:33 UTC+2, Ramchandra Apte a écrit :

    PS C:\> $cmd="import sys;"
    PS C:\> $cmd+="print('\n'.join(sys.path))"
    PS C:\> $cmd
    import sys;print('\n'.join(sys.path))
    PS C:\> c:\python32\python -c $cmd

    C:\Windows\system32\python32.zip
    c:\python32\DLLs
    c:\python32\lib
    c:\python32
    c:\python32\lib\site-packages
    PS C:\>

    Can probably be in a .cmd file.

    jmf
    , Oct 11, 2012
    #6
  7. Chris Angelico

    Gisle Vanem Guest

    <> wrote in comp.lang.python

    (my ISP no longer updates this group. Last message is from 8. April.
    Does the postings to the python mailing-list automatically get reposted
    to comp.lang.python?)

    > C:\Windows\system32\python32.zip
    > c:\python32\DLLs


    I see a similar result:
    f:\Windows\system32\python27.zip

    Where is it determined that python27.zip should be in sys.path?
    I have no such file anywhere. I'm using ActivePython 2.7.2.

    --gv
    Gisle Vanem, Oct 11, 2012
    #7
  8. On Fri, Oct 12, 2012 at 3:49 AM, Gisle Vanem <> wrote:
    > <> wrote in comp.lang.python
    >
    > (my ISP no longer updates this group. Last message is from 8. April.
    > Does the postings to the python mailing-list automatically get reposted to
    > comp.lang.python?)


    Yes, c.l.p and python-list mirror each other.

    >> C:\Windows\system32\python32.zip
    >> c:\python32\DLLs

    >
    >
    > I see a similar result:
    > f:\Windows\system32\python27.zip
    >
    > Where is it determined that python27.zip should be in sys.path?
    > I have no such file anywhere. I'm using ActivePython 2.7.2.


    It's in sys.path in the three Windows Pythons I have here:

    C:\Documents and Settings\M>python -c "import sys; print(sys.version); print('\n
    '.join(sys.path))"
    2.4.5 (#1, Jul 22 2011, 02:01:04)
    [GCC 4.1.1]

    C:\Program Files\LilyPond\usr\lib\python24.zip
    C:\Program Files\LilyPond\usr\lib\python2.4
    C:\Program Files\LilyPond\usr\lib\python2.4\plat-mingw32
    C:\Program Files\LilyPond\usr\lib\python2.4\lib-tk
    C:\Program Files\LilyPond\usr\lib\python2.4\lib-dynload
    C:\Program Files\LilyPond\usr\lib\python2.4\site-packages

    C:\Documents and Settings\M>\python26\python -c "import sys; print(sys.version);
    print('\n'.join(sys.path))"
    2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)]

    C:\WINDOWS\system32\python26.zip
    C:\python26\DLLs
    C:\python26\lib
    C:\python26\lib\plat-win
    C:\python26\lib\lib-tk
    C:\python26
    C:\python26\lib\site-packages

    C:\Documents and Settings\M>\python32\python -c "import sys; print(sys.version);
    print('\n'.join(sys.path))"
    3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)]

    C:\WINDOWS\system32\python32.zip
    C:\python32\DLLs
    C:\python32\lib
    C:\python32
    C:\python32\lib\site-packages
    C:\python32\lib\site-packages\win32
    C:\python32\lib\site-packages\win32\lib
    C:\python32\lib\site-packages\Pythonwin

    C:\Documents and Settings\M>

    Presumably it's so that I can zip up my entire Python library and toss
    it into a convenient file. I don't think it costs much to stat a file
    and find it's not there before moving on, so it's not a problem to
    leave it there.

    ChrisA
    Chris Angelico, Oct 11, 2012
    #8
  9. Chris Angelico wrote:

    > On Fri, Oct 12, 2012 at 3:49 AM, Gisle Vanem <> wrote:

    > > <> wrote in comp.lang.python
    > >
    > > (my ISP no longer updates this group.Last message is from 8. April.
    > > Does the postings to the python mailing-list automatically get reposted to
    > > comp.lang.python?)

    >
    > Yes, c.l.p and python-list mirror each other.
    >

    > >> C:\Windows\system32\python32.zip
    > >> c:\python32\DLLs

    > >
    > >
    > > I see a similar result:
    > > f:\Windows\system32\python27.zip
    > >
    > > Where is it determined that python27.zip should be in sys.path?
    > > I have no such file anywhere. I'm using ActivePython 2.7.2.

    >
    > It's in sys.path in thethree Windows Pythons I have here:
    >
    > C:\Documents and Settings\M>python -c "import sys; print(sys.version); print('\n
    > '.join(sys.path))"
    > 2.4.5 (#1, Jul 22 2011, 02:01:04)
    > [GCC 4.1.1]
    >
    > C:\Program Files\LilyPond\usr\lib\python24.zip
    > C:\Program Files\LilyPond\usr\lib\python2.4
    > C:\Program Files\LilyPond\usr\lib\python2.4\plat-mingw32
    > C:\Program Files\LilyPond\usr\lib\python2.4\lib-tk
    > C:\Program Files\LilyPond\usr\lib\python2.4\lib-dynload
    > C:\Program Files\LilyPond\usr\lib\python2.4\site-packages
    >
    > C:\Documents and Settings\M>\python26\python -c "import sys; print(sys.version);
    > print('\n'.join(sys.path))"
    > 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)]
    >
    > C:\WINDOWS\system32\python26.zip
    > C:\python26\DLLs
    > C:\python26\lib
    > C:\python26\lib\plat-win
    > C:\python26\lib\lib-tk
    > C:\python26
    > C:\python26\lib\site-packages
    >
    > C:\Documents and Settings\M>\python32\python -c "import sys; print(sys.version);
    > print('\n'.join(sys.path))"
    > 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)]
    >
    > C:\WINDOWS\system32\python32.zip
    > C:\python32\DLLs
    > C:\python32\lib
    > C:\python32
    > C:\python32\lib\site-packages
    > C:\python32\lib\site-packages\win32
    > C:\python32\lib\site-packages\win32\lib
    > C:\python32\lib\site-packages\Pythonwin
    >
    > C:\Documents and Settings\M>
    >
    > Presumably it's so that I can zip upmy entire Python library and toss
    > it into a convenient file. I don't think it costs much to stat a file
    > and find it's not there before moving on, so it's not a problem to
    > leave it there.
    >
    > ChrisA


    Interesting, my results are slightly different. Here is what I
    get from (one of) my Python installs.

    2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)]
    C:\ramit\Python27\python27.zip
    C:\ramit\Python27\DLLs
    C:\ramit\Python27\lib
    C:\ramit\Python27\lib\plat-win
    C:\ramit\Python27\lib\lib-tk
    C:\ramit\Python27
    C:\ramit\Python27\lib\site-packages

    Ramit

    This email is confidential and subject to important disclaimers and
    conditions including on offers for the purchase or sale of
    securities, accuracy and completeness of information, viruses,
    confidentiality, legal privilege, and legal entity disclaimers,
    available at http://www.jpmorgan.com/pages/disclosures/email.
    Prasad, Ramit, Oct 11, 2012
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Achim Domma (Procoders)

    read input for cmd.Cmd from file

    Achim Domma (Procoders), Jun 3, 2005, in forum: Python
    Replies:
    2
    Views:
    8,034
    Peter Otten
    Jun 3, 2005
  2. Sarir Khamsi

    Interpreter-like help in cmd.Cmd

    Sarir Khamsi, Jun 9, 2005, in forum: Python
    Replies:
    4
    Views:
    353
    Bengt Richter
    Jun 26, 2005
  3. =?ISO-8859-1?Q?Sch=FCle_Daniel?=

    [exec cmd for cmd in cmds]

    =?ISO-8859-1?Q?Sch=FCle_Daniel?=, Mar 8, 2006, in forum: Python
    Replies:
    3
    Views:
    370
    Scott David Daniels
    Mar 8, 2006
  4. Diez B. Roggisch

    pydb remote debugging/cmd.Cmd over socket?

    Diez B. Roggisch, May 28, 2008, in forum: Python
    Replies:
    2
    Views:
    537
    Diez B. Roggisch
    May 29, 2008
  5. Isaac Won
    Replies:
    9
    Views:
    348
    Ulrich Eckhardt
    Mar 4, 2013
Loading...

Share This Page