By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
448,838 Members | 1,623 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 448,838 IT Pros & Developers. It's quick & easy.

os.system and quoted strings

P: n/a
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:\\Documents and Settings\\somepath\\"
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

Feb 27 '07 #1
Share this Question
Share on Google+
8 Replies


P: n/a
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
http://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:\\Documents and Settings\\somepath\\"
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

Feb 27 '07 #2

P: n/a
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:\\Documents and Settings\\somepath\\"
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:
http://docs.python.org/lib/module-os.path.html

zefciu
Feb 27 '07 #3

P: n/a
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:\\Documents and Settings\\somepath\\"
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:
http://docs.python.org/lib/module-os.path.html

zefciu
Feb 27 '07 #4

P: n/a
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:\\Documents and Settings\\somepath\\"
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

Feb 27 '07 #5

P: n/a
On Feb 27, 2:36 pm, "Sriram" <sriram.sundarara...@gmail.comwrote:
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:\\Documents and Settings\\somepath\\"
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

Feb 27 '07 #6

P: n/a
On Feb 27, 9:16 am, Steven D'Aprano
<s...@REMOVE.THIS.cybersource.com.auwrote:
On Tue, 27 Feb 2007 06:24:41 -0800, svata wrote:
....
import time
import os
dir = "C:\\Documents and Settings\\somepath\\"

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.

Feb 28 '07 #7

P: n/a
"Dan Bishop" <da*****@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.normpath() 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.
Feb 28 '07 #8

P: n/a
Dennis Lee Bieber <wl*****@ix.netcom.comwrote:
>>>import os.path
os.path.join("c:",
... "Documents and Settings",
... "somepath")
'c:Documents and Settings\\somepath'
>>>>

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:directory" 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 -- si***@chiark.greenend.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
Feb 28 '07 #9

This discussion thread is closed

Replies have been disabled for this discussion.