Is there any way to pass arguments to the game when running it from the CLI with Headless/Server version?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Moldworm

I want to be able to programmatically create new instances of my game listening on different ports. Is there any possibility of reading arguments passed when you run the game with something like:

godot --path ~/path/to/game/ --args "example"

And then get “example” when the code is running.

Any other easier or clever way of doing this would be much appreciated!

:bust_in_silhouette: Reply From: Calinou

You can use OS.get_cmdline_args() for this. However, you’ll have to parse command-line arguments yourself. Due to how Godot currently parses them, there are a few limitations to be aware of:

  • Command-line arguments should be written in the form --key=value. Godot will try to open value as if it was a scene file if you use --key value.
  • Custom command-line arguments shouldn’t conflict with engine arguments.

If this is too limiting, you can also use environment variables using OS.get_environment() instead.

PS: You can set Editor → Main Run Args in the Project Settings to define command-line arguments to be passed by the editor when running the project.

To parse command-line arguments into a dictionary, you could use something like this:

    var arguments = {}
    for argument in OS.get_cmdline_args():
        # Parse valid command-line arguments into a dictionary
        if argument.find("=") > -1:
            var key_value = argument.split("=")
            arguments[key_value[0].lstrip("--")] = key_value[1]

Is it possible to parse command line arguments with exported game binaries as well?

slasktotten | 2020-01-23 09:47

Thanks a lot

supper_raptor | 2020-10-03 12:43

Can you give an example of how to work with
Editor → Main Run Args
?

avnih | 2021-05-26 07:15