Repository: godot
Issue: OS.execute_with_pipe() will not process escaped arguments,  different from the way OS.execute() handles them.
Labels: bug,topic:core

### Tested versions

v4.3.stable.official [77dcf97d8]

### System information

Linux Kubuntu 24.04 KDE Plasma Version: 5.27.11 KDE Frameworks Version: 5.115.0 Qt Version: 5.15.13 Kernel Version: 6.8.0-39-generic (64-bit) Graphics Platform: X11 Processors: 16 × 12th Gen Intel® Core™ i7-1260P Memory: 15.3 GiB of RAM

### Issue description

These two functions should process arguments the same way:

```
# Will process escaped arguments and normal argumets
# E.g.  
# args=["-lsa", "\"/home/user1/New\\ Folder/\""]
# bin ="ls"
code = OS.execute(bin, args, value, true, false )
```

```
# Will NOT process escaped arguments, but only normal arguments.
# E.g.  
# args=["-lsa", "\"/home/user1/New\\ Folder/\""]
# bin ="ls"
info = OS.execute_with_pipe(bin, args)
```



### Steps to reproduce

See attached code: 
[exec_pipe_demo.zip](https://github.com/user-attachments/files/17119289/exec_pipe_demo.zip)


```gdscript
extends Control

var pipe
var stderr
var pid
var thread
var info

var bin
var args

# Show the difference in processing escaped arguments of OS.execute() and
# OS.execute_with_pipe()
func _ready(): 
	# Fails with pipe execute, but works with blocking execute
	args=["-lsa", "\"/home/user1/New\\ Folder/\""]
	
	# Works with either execute,
	#args=["-lsa", "/home/user1/New Folder/"]
	
	bin = "ls"

	if true:  # Run blocking execute test
		print("OS.execute test:")
		var value=[]
		var code: int
		code = OS.execute(bin, args, value, true, false )
		print("OS Code=",code)
		for v in value:
			print(v)
		
	if true: # Run pipe execute test
		print("OS.execute_with_pipe:")
		info = OS.execute_with_pipe(bin, args)
		pipe = info["stdio"]
		stderr=info["stderr"]
		pid=info["pid"]
		thread = Thread.new()
		thread.start(_thread_func)
		thread.wait_to_finish()
		get_window().close_requested.connect(clean_thread)
		
	pass
	
func _thread_func():
	# read stdin and add to TextEdit.
	var line = ""
	var pipe_err
	while pipe.is_open():
		pipe_err=pipe.get_error() 
		if pipe_err == OK:
			line=pipe.get_line()
			print(line)
			pass
		else:
			line=stderr.get_line()
			if line!="":
				print(line)
			else:
				break
	clean_thread()
	
func clean_thread():
	pipe.close()
	OS.kill(pid)
```
	


### Minimal reproduction project (MRP)

[exec_pipe_demo.zip](https://github.com/user-attachments/files/17119289/exec_pipe_demo.zip)
1. Unzip the  attached file above including the scene. 
2. Add it to an empty project . 
3. Create a folder with a blank in the name. E.g. `/home/user1/New Folder`
4. Adjust the 2nd argument in `args=["-lsa", "\"/home/user1/New\\ Folder/\""]  `accordingly to the new folder path. Leaving escaped string.
5. Run the scene and check result in Output

You will notice for the escaped path, `OS,execute() `runs the arguments, while `OS.execute_with_pipe()` fails. This shows the arguments are processed differently between the two, which in certain instances if the arguments are escaped due to spaces or quotes, then code will fail with the pipe version.

Another example is this
```
args=["-c2", "\"yahoo\\.com\""]
bin="ping"
```
The above will fail when using pipe but not with blocking execute. I understand may not make sense to escape  yahoo, but I am pointing out that escaping strings should work the same way with both `OS.execute() and OS.execute_with_pipe()`

Godot Engine v4.3.stable.official.77dcf97d8 - https://godotengine.org
Vulkan 1.3.274 - Forward+ - Using Device #0: Intel - Intel(R) Graphics (ADL GT2)

```
OS.execute test:
OS Code=0
PING yahoo.com (98.137.11.164) 56(84) bytes of data.
64 bytes from media-router-fp73.prod.media.vip.gq1.yahoo.com (98.137.11.164): icmp_seq=1 ttl=50 time=100 ms
64 bytes from media-router-fp73.prod.media.vip.gq1.yahoo.com (98.137.11.164): icmp_seq=2 ttl=50 time=55.9 ms

--- yahoo.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 55.939/78.157/100.375/22.218 ms

OS.execute_with_pipe:

ping: "yahoo\.com": Name or service not known
```



This works with both:

args=["-c2", "yahoo.com"]
bin="ping"