[Interest] Executing PowerShell command with quotes using QProcess
Thiago Macieira
thiago.macieira at intel.com
Thu Apr 3 00:23:59 CEST 2014
Em qua 02 abr 2014, às 12:18:59, Jason Kretzer escreveu:
> powershellHDD.start("PowerShell -Command \"&{(Get-WmiObject
> Win32_LogicalDisk -Filter \\\"DeviceID='C:’\\\").Size}\"");
> This does not work as I expect it to. The dataHDDsize is an empty string
> “”. If I pull the command out and run it directly from a command prompt
> (removing the escaping backslashes) it runs exactly as I expect it to
> returning a number. I thought maybe the number is the problem and I have
> similar commands that return proper letters and the same thing occurs.
>
> Style and suggestions for third party libs aside, does any one have any
> pointers?
There's a comment in qprocess.cpp that reads:
// handle quoting. tokens can be surrounded by double quotes
// "hello world". three consecutive double quotes represent
// the quote character itself.
I don't know whose idea it was to use three quotes successively to indicate a
quote character. It doesn't work on a regular Unix shell:
$ echo """hello"""
hello
Nor on Windows's prompt:
C:\>echo """hello"""
"""hello"""
That commit has been there since the Qt public history started. It's even
documented as such (I had to look it up, I didn't know):
http://qt-project.org/doc/qt-5/qprocess.html#start-3
But I don't know why it was done like that. It's highly surprising. If it
weren't documented, I'd be tempted to just change behaviour and go for
standard backslashing.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
More information about the Interest
mailing list