+1 vote

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!

asked May 14, 2019 in Engine by Moldworm (13 points)

1 Answer

+2 votes

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]
answered May 15, 2019 by Calinou (5,924 points)
edited May 15, 2019 by Calinou

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

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.