os.system and quoted strings

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • svata

    os.system and quoted strings

    Hello,

    as I'm new to python I've stumbled accros os.system and its not very
    well documented usage.

    I use Win XP Pro and Python 2.5.

    Here is the code snippet:

    --------------------------------------------------------------------------------------------------

    import time
    import os

    dir = "C:\\Docume nts and Settings\\somep ath\\"
    fileName = time.strftime(" %d%m%Y")
    os.system('gvim dir+fileName+". txt"')

    ---------------------------------------------------------------------------------------------------

    The problem is that concatenated variable dir+fileName doesn't get
    expanded as expected.

    Is there anything I omitted?

    svata

  • Sriram

    #2
    Re: os.system and quoted strings

    Hello svata,
    It is always better to compose your string before you send it as a
    command.

    try printing your command string out like this :
    print 'gvim dir+fileName+". txt". You'll see what the problem is.

    One possible solution is to compose your command string in the
    following manner:
    cmd = "gvim %s%s.txt" %(dir, fileName)
    and simply call os.system with cmd.
    os.system(cmd)

    Here is a little more detail on string format specifiers


    HTH
    Sriram

    On Feb 27, 7:24 am, "svata" <svato...@gmail .comwrote:
    Hello,
    >
    as I'm new to python I've stumbled accros os.system and its not very
    well documented usage.
    >
    I use Win XP Pro and Python 2.5.
    >
    Here is the code snippet:
    >
    --------------------------------------------------------------------------------------------------
    >
    import time
    import os
    >
    dir = "C:\\Docume nts and Settings\\somep ath\\"
    fileName = time.strftime(" %d%m%Y")
    os.system('gvim dir+fileName+". txt"')
    >
    ---------------------------------------------------------------------------------------------------
    >
    The problem is that concatenated variable dir+fileName doesn't get
    expanded as expected.
    >
    Is there anything I omitted?
    >
    svata

    Comment

    • zefciu

      #3
      Re: os.system and quoted strings

      svata wrote:
      Hello,
      >
      as I'm new to python I've stumbled accros os.system and its not very
      well documented usage.
      >
      I use Win XP Pro and Python 2.5.
      >
      Here is the code snippet:
      >
      --------------------------------------------------------------------------------------------------
      >
      import time
      import os
      >
      dir = "C:\\Docume nts and Settings\\somep ath\\"
      fileName = time.strftime(" %d%m%Y")
      os.system('gvim dir+fileName+". txt"')
      >
      ---------------------------------------------------------------------------------------------------
      >
      The problem is that concatenated variable dir+fileName doesn't get
      expanded as expected.
      >
      Is there anything I omitted?
      >
      svata
      >
      The way you write it, Python has no idea that dir and fileName are
      variables, not literal parts of the string. You should put those names
      outside the string, or better us the % format operator as Sriram showed
      you, or even better use os.path module. Here is the reference:
      Source code: Lib/genericpath.py, Lib/posixpath.py(for POSIX) and Lib/ntpath.py(for Windows). This module implements some useful functions on pathnames. To read or write files see open(), and for ac...


      zefciu

      Comment

      • zefciu

        #4
        Re: os.system and quoted strings

        svata wrote:
        Hello,
        >
        as I'm new to python I've stumbled accros os.system and its not very
        well documented usage.
        >
        I use Win XP Pro and Python 2.5.
        >
        Here is the code snippet:
        >
        --------------------------------------------------------------------------------------------------
        >
        import time
        import os
        >
        dir = "C:\\Docume nts and Settings\\somep ath\\"
        fileName = time.strftime(" %d%m%Y")
        os.system('gvim dir+fileName+". txt"')
        >
        ---------------------------------------------------------------------------------------------------
        >
        The problem is that concatenated variable dir+fileName doesn't get
        expanded as expected.
        >
        Is there anything I omitted?
        >
        svata
        >
        The way you write it, Python has no idea that dir and fileName are
        variables, not literal parts of the string. You should put those names
        outside the quotation marks, or better us the % format operator as
        Sriram showed
        you, or even better use os.path module. Here is the reference:
        Source code: Lib/genericpath.py, Lib/posixpath.py(for POSIX) and Lib/ntpath.py(for Windows). This module implements some useful functions on pathnames. To read or write files see open(), and for ac...


        zefciu

        Comment

        • Steven D'Aprano

          #5
          Re: os.system and quoted strings

          On Tue, 27 Feb 2007 06:24:41 -0800, svata wrote:
          Hello,
          >
          as I'm new to python I've stumbled accros os.system and its not very
          well documented usage.
          Documentation seems pretty good to me.

          system(...)
          system(command) -exit_status

          Execute the command (a string) in a subshell.

          What more did you want to see?
          I use Win XP Pro and Python 2.5.
          >
          Here is the code snippet:
          >
          --------------------------------------------------------------------------------------------------
          >
          import time
          import os
          >
          dir = "C:\\Docume nts and Settings\\somep ath\\"
          I believe that Windows will accept forward slashes as directory
          separators, so you can write that as:

          dir = "C:/Documents and Settings/somepath/"

          fileName = time.strftime(" %d%m%Y")
          os.system('gvim dir+fileName+". txt"')
          This will execute the command

          gvim dir+fileName+". txt"

          exactly as you typed it. I assume you don't have a file called
          dir+fileName+". txt"

          The problem is that concatenated variable dir+fileName doesn't get
          expanded as expected.
          Why would you expect them to be expanded? Does the documentation of
          os.system say that the command string will be expanded before it is passed
          to the subshell?

          Is there anything I omitted?
          dir = "C:/Documents and Settings/somepath/"
          fileName = time.strftime(" %d%m%Y")
          fileName = dir + fileName + ".txt"
          os.system('gvim %s' % fileName)

          That builds the command string correctly before passing it to a subshell.


          --
          Steven

          Comment

          • svata

            #6
            Re: os.system and quoted strings

            On Feb 27, 2:36 pm, "Sriram" <sriram.sundara ra...@gmail.com wrote:
            Hello svata,
            It is always better to compose your string before you send it as a
            command.
            >
            try printing your command string out like this :
            print 'gvim dir+fileName+". txt". You'll see what the problem is.
            >
            One possible solution is to compose your command string in the
            following manner:
            cmd = "gvim %s%s.txt" %(dir, fileName)
            and simply call os.system with cmd.
            os.system(cmd)
            >
            Here is a little more detail on string format specifiershttp://docs.python.org/lib/typesseq-strings.html
            >
            HTH
            Sriram
            >
            On Feb 27, 7:24 am, "svata" <svato...@gmail .comwrote:
            >
            Hello,
            >
            as I'm new to python I've stumbled accros os.system and its not very
            well documented usage.
            >
            I use Win XP Pro and Python 2.5.
            >
            Here is the code snippet:
            >
            --------------------------------------------------------------------------------------------------
            >
            import time
            import os
            >
            dir = "C:\\Docume nts and Settings\\somep ath\\"
            fileName = time.strftime(" %d%m%Y")
            os.system('gvim dir+fileName+". txt"')
            >
            ---------------------------------------------------------------------------------------------------
            >
            The problem is that concatenated variable dir+fileName doesn't get
            expanded as expected.
            >
            Is there anything I omitted?
            >
            svata
            Thank you for prompt reply. I should be more concise with strings, I
            think :)

            svata

            Comment

            • Dan Bishop

              #7
              Re: os.system and quoted strings

              On Feb 27, 9:16 am, Steven D'Aprano
              <s...@REMOVE.TH IS.cybersource. com.auwrote:
              On Tue, 27 Feb 2007 06:24:41 -0800, svata wrote:
              ....
              import time
              import os
              >
              dir = "C:\\Docume nts and Settings\\somep ath\\"
              >
              I believe that Windows will accept forward slashes as directory
              separators, so you can write that as:
              >
              dir = "C:/Documents and Settings/somepath/"
              Windows system calls treat / and \ interchangeably , but the command
              prompt insists on backslashes.

              Comment

              • Duncan Booth

                #8
                Re: os.system and quoted strings

                "Dan Bishop" <danb_83@yahoo. comwrote:
                Windows system calls treat / and \ interchangeably , but the command
                prompt insists on backslashes.
                No. Commands built-in to the command prompt and certain other programs
                (mostly but not exclusively from Microsoft) insist on backslashes. Most
                programs, especially those originating from the unixverse, will accept
                backslashes and forward slashes interchangeably from the command prompt.
                Even a lot of Microsoft's own programs are happy to accept backslashed
                command line arguments.

                If in doubt just call os.path.normpat h() on a path string before using it.
                Also it is usually worth putting command line arguments inside " marks to
                avoid problems with spaces or other special characters in path names.

                Comment

                • Sion Arrowsmith

                  #9
                  Re: os.system and quoted strings

                  Dennis Lee Bieber <wlfraed@ix.net com.comwrote:
                  >>>import os.path
                  >>>os.path.join ("c:",
                  >... "Documents and Settings",
                  >... "somepath")
                  >'c:Documents and Settings\\somep ath'
                  >>>>
                  >
                  >Hmmm, a quick test with
                  >
                  >dir "e:userdata "
                  >
                  >worked, so the top level \ may not be needed...
                  "drive:" is the 'cwd' on the drive, so "drive:director y" is relative
                  to that. Try "cd e:userdata" and repeat "dir e:userdata" and see what
                  happens. os.path.join() has to behave as above, otherwise you wouldn't
                  be able to use it to construct a relative path like that.

                  (And since I don't think anyone's mentioned it in this thread yet,
                  subprocess.call () instead of os.system().)

                  --
                  \S -- siona@chiark.gr eenend.org.uk -- http://www.chaos.org.uk/~sion/
                  ___ | "Frankly I have no feelings towards penguins one way or the other"
                  \X/ | -- Arthur C. Clarke
                  her nu becomeþ se bera eadward ofdun hlæddre heafdes bæce bump bump bump

                  Comment

                  Working...