how to properly pass literal strings python code to be executed using python -c
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Mon Feb 28 18:14:24 EST 2011
On Mon, 28 Feb 2011 10:59:01 -0800, jmoons wrote:
> I need some help figuring out how to execute this python code from
> python -c
> I am have trouble formatting python so that it will execute for another
> app in cmd I understand there maybe other ways to do what I am doing but
> I am limited by the final execution using cmd python -c so please keep
> this in mind.
> I'm limited by the final delivery of code. The python is being called by
> a server that does not have access to any python script file
Let me translate that...
"I'm having trouble hammering this nail with a screwdriver. Keep in mind
that I am limited by the requirement that I use a screwdriver, not a
hammer, to hammer the nail. The nail is being hammered by somebody who
doesn't have a hammer."
So give them a hammer. Put the code in a text file, call it "main.py" or
something, and execute "python -m main", or "python -c 'import main'" if
you prefer.
I don't understand the requirement to avoid storing your code in a file
-- surely you won't be typing the script into cmd every single time you
want to run it, so surely it will be stored in a batch file or similar?
As far as I can tell, the *only* legitimate reason for the requirement is
to win a bet :) Otherwise, you're just making your life much much harder
than it needs to be.
[...]
> So this what i have but no worky
>
> cmdline = "\" import os, shutil \n for root, dirs, files in
> os.walk("+myPath+"):\n \t for file in files: \n \t \t
> os.remove(os.path.join(root, file)) \n \t for dir in dirs: \n \t\t
> shutil.rmtree(os.path.join(root, dir))"
I have no idea what the string handling rules for cmd are, and I'm not
going to try to guess. This doesn't appear to be a Python problem, it's a
cmd problem. You need to work out how to correctly quote your string.
Perhaps try on some Windows forums.
> I have also tried the following
> python -c "import os; import shutil; for root, dirs, files in
> os.walk('+myPath+'): for file in files: os.remove(os.path.join(root,
> file)); for dir in dirs: shutil.rmtree(os.path.join(root, dir))"
>
> I am still getting error tree(os.path.join(root, dir)) ^ SyntaxError:
> invalid syntax
No you don't. You don't call a function "tree", so you can't be getting
that error. The actual function you call is shutil.rmtree. Please don't
retype, summarize, simplify or paraphrase error messages. Copy and paste
them *exactly* as they are shown, complete with any traceback which is
printed.
--
Steven
More information about the Python-list
mailing list