4

Related to this question

The question in principle is the same, I have a subprocess.system call

...
EDITOR = os.environ.get('EDITOR', 'vim')
subprocess.call([EDITOR, tf.name])
...

Where EDITOR is the environments $EDITOR variable, tf.name is just a filename.

However, sublime text suggest to set the $EDITOR to export EDITOR='subl -w' Making my call look like this:

subprocess.call(['subl -w', "somefilename"])

And it fails like this:

raceback (most recent call last):
  File "/usr/bin/note", line 65, in <module>
    storage["notes"][args.name] = writeNote(args.name, storage)
  File "/usr/bin/note", line 54, in writeNote
    subprocess.call([EDITOR, tf.name])
  File "/usr/lib/python3.5/subprocess.py", line 557, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.5/subprocess.py", line 1541, in _execute_child
    raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'subl -w'

Of course, it's supposed to look likie this

subprocess.call([subl", "-w" "somefilename"])

A workaround would perhaps be

args = EDITOR.split(" ")
subprocess.call(args + ["somefilename"])

But I'm a little wary of doing this, because I cannot know what $EDITOR is set to, is this safe to do?

What's the proper way to handle this case?

1
  • @andlrc No not a duplicate, that's not my question. I know how to access environment variables Commented May 8, 2016 at 19:51

1 Answer 1

5

You can rather use shlex. It takes care of UNIX shell like commands. For example:
>>> shlex.split( "folder\ editor" ) + ["somefilename"]
['folder editor', 'somefilename']
>>> shlex.split( "editor -arg" ) + ["somefilename"]
['editor', '-arg', 'somefilename']

So you should be able to directly do:
subprocess.call( shlex.split(EDITOR) + ["somefilename"] )

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.